private void CheckInterface(Type type, TypeConfig config) { foreach (var it in type.GetInterfaces()) { config.Interfaces.Add(it.GetTypeName()); } }
/// <summary> /// 读取类配置 /// </summary> /// <param name="type"></param> /// <param name="config"></param> /// <returns></returns> private void AnalyzeEnum(Type type, TypeConfig config) { config.NetType = NetType.Enum; foreach (var field in type.GetFields()) { config.Fields.Add(field.Name, GetConfig(type, field)); } }
/// <summary> /// 读取类配置 /// </summary> /// <param name="type"></param> /// <returns></returns> private TypeConfig Analyze(Type type) { TypeConfig config = new TypeConfig { Name = type.Name, ConfigType = type, TypeName = type.GetTypeName() }; GetInfo(config, type); if (type.IsEnum) { AnalyzeEnum(type, config); return(config); } CheckInterface(type, config); if (type.IsInterface) { config.NetType = NetType.Interface; } else { GetConstructors(type, config); config.NetType = type.IsClass ? NetType.Class : NetType.Struct; } if (type.IsGenericType) { config.Generics = new List <string>(); foreach (var gen in type.GetGenericArguments()) { config.Generics.Add(gen.GetTypeName()); } } if (type.IsSupperInterface(typeof(System.Collections.IEnumerable))) { config.IsArray = true; } foreach (var field in type.GetFields(flag)) { config.Fields.Add(field.Name, GetConfig(type, field)); } foreach (var property in type.GetProperties(flag)) { config.Properties.Add(property.Name, GetConfig(type, property)); } foreach (var property in type.GetMethods(flag)) { config.Methods.Add(GetConfig(type, property)); } return(config); }
private void GetInfo(TypeConfig config, Type type) { if (type.BaseType != typeof(object)) { config.BaseType = type.BaseType.GetTypeName(); } var member = _helpXml.FirstOrDefault(p => p.Name == type.FullName); if (member != null) { config.Description = member.Summary; config.Caption = member.DisplayName; config.Description = member.Remark ?? member.Summary; } GetExtendValue(type, config); CheckAttributes(config, type); }
private void GetConstructors(Type type, TypeConfig config) { var ctors = type.GetConstructors(); int cnt = 1; foreach (var method in ctors) { var info = new MethodConfig { Name = $"ctor.{cnt++}" }; foreach (var para in method.GetParameters()) { CheckParameter(para, info); } if (info.Argument.Count == 0) { info.Argument = null; } config.Methods.Add(info); } }