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()); }
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 }); }