예제 #1
0
        private IList <MetaParam> FindParameters(Type type)
        {
            IDictionary <string, MetaParam> results = new Dictionary <string, MetaParam>();

            for (Type t = type; t != null; t = t.BaseType)
            {
                foreach (PropertyInfo prop in t.GetProperties())
                {
                    IPluginConfigurationParameter param = GetConfigurationParameter(prop);
                    if (param != null && !results.ContainsKey(prop.Name))
                    {
                        results.Add(prop.Name, GetParameterToAdd(type, param, prop));
                    }
                }
            }
            return(results.Values.ToList());
        }
예제 #2
0
        private MetaParam GetParameterToAdd(Type type, IPluginConfigurationParameter param, PropertyInfo prop)
        {
            string     propName = prop.Name;
            MethodInfo getter   = prop.GetGetMethod();
            MethodInfo setter   = prop.GetSetMethod();

            var userDefinedConfigParam = param as IUserDefinedPluginConfiguration;

            if (userDefinedConfigParam != null)
            {
                MethodInfo visibilityChecker = null;
                if (!string.IsNullOrEmpty(userDefinedConfigParam.VisibilityChecker))
                {
                    visibilityChecker = type.GetMethod(userDefinedConfigParam.VisibilityChecker);
                }

                if (prop.PropertyType.IsEnum)
                {
                    Dictionary <string, KeyValuePair <string, string> > helpInfo = null;

                    foreach (IHelpLinkForPluginEnumConfiguration help in GetHelpLinksForEnum(prop))
                    {
                        if (helpInfo == null)
                        {
                            helpInfo = new Dictionary <string, KeyValuePair <string, string> >();
                        }
                        helpInfo.Add(help.EnumValue, new KeyValuePair <string, string>(help.Text, help.Url));
                    }
                    return(new MetaParam {
                        Type = MetaParamType.UserChosenOptionParameter,
                        PropName = propName,
                        Getter = getter,
                        Setter = setter,
                        Encrypt = userDefinedConfigParam.Encrypt,
                        Persist = userDefinedConfigParam.Persist,
                        visibilityChecker = visibilityChecker,
                        UserConfigurationParameter = userDefinedConfigParam,
                        HelpInfo = helpInfo
                    });
                }

                return(new MetaParam {
                    Type = MetaParamType.UserDefinedParameter,
                    PropName = propName,
                    Getter = getter,
                    Setter = setter,
                    Encrypt = userDefinedConfigParam.Encrypt,
                    Persist = userDefinedConfigParam.Persist,
                    visibilityChecker = visibilityChecker,
                    UserConfigurationParameter = userDefinedConfigParam
                });
            }

            return(new MetaParam {
                Type = MetaParamType.Parameter,
                PropName = propName,
                Getter = getter,
                Setter = setter,
                Encrypt = param.Encrypt,
                Persist = param.Persist
            });
        }