public static ITypeMapping CreateMapping(Type type, XElement element, IConvertCaseStrategy convertCaseStrategy) { var elementList = element.Elements().ToList(); var attributeList = element.Attributes().ToList(); var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.CanWrite && p.GetSetMethod(true).IsPublic).ToList(); ITypeMapping typeMapping = new TypeMapping(); foreach (var item in properties) { var xName = convertCaseStrategy.ConvertCase(item.Name); var attribute = attributeList.Where(i => i.Name == xName).FirstOrDefault(); if (attribute != null) { var mappingAttributes = new MappingForAttributes(attribute, item); typeMapping.Add(mappingAttributes); continue; } var ele = elementList.Where(i => i.Name == xName).FirstOrDefault(); if (ele != null) { var mappinger = MappingerSelector.Get(item.PropertyType, convertCaseStrategy); var mappingElement = new MappingForElement(ele, item, mappinger); typeMapping.Add(mappingElement); } } return(typeMapping); }
/// <summary> /// Mapping配置实体类型。 /// </summary> /// <param name="type"></param> /// <param name="element"></param> /// <returns></returns> public object Mapping(Type type, XElement element, IConvertCaseStrategy convertCaseStrategy) { // 获取mappinger选择器 IMappinger mappinger = MappingerSelector.Get(type, convertCaseStrategy); convertCaseStrategy = convertCaseStrategy ?? new DefaultConvertCaseStrategy(); // 如果不是entity,直接执行返回值 if (!(mappinger is EntityMappinger)) { mappinger.ConvertCaseStrategy = convertCaseStrategy; return(mappinger.Mapping(element, type)); } // 创建实例 var instance = Activator.CreateInstance(type); // 创建 mapping ITypeMapping typeMapping = MappingFactory.CreateMapping(type, element, convertCaseStrategy); // 执行 typeMapping.Apply(instance); return(instance); }
public static void Setting(string sectionName = null, string filePath = null, Func <string, string> funcConvertCase = null, Func <string, string, IConvertCaseStrategy, Section> funcSection = null) { IConvertCaseStrategy convertCaseStrategy = funcConvertCase == null ? (IConvertCaseStrategy) new DefaultConvertCaseStrategy() : new SettingConvertCaseStrategy(funcConvertCase); ISuperConfigStrategy superConfigStrategy = funcSection == null ? (ISuperConfigStrategy) new DefaultSuperConfigStrategy(convertCaseStrategy) : new SettingSuperConfigStrategy(convertCaseStrategy, funcSection); _T = _superConfigEngine.Mapping <T>(sectionName, filePath, superConfigStrategy); }
/// <summary> /// 根据类型选择不同的Mappinger /// </summary> /// <param name="type"></param> /// <returns></returns> public static IMappinger Get(Type type, IConvertCaseStrategy convertCaseStrategy) { var canMappingers = _mappingers.Where(i => i.IsCanMapping(type)).ToList(); if (canMappingers.Count > 1) { throw new SuperConfigException($"出现多个Mapping选择器!"); } IMappinger mappinger = canMappingers.Count == 0 ? new EntityMappinger() : canMappingers.First(); mappinger.ConvertCaseStrategy = convertCaseStrategy; return(mappinger); }
/// <summary> /// 获取配置信息 /// </summary> /// <param name="element">XElement对象。</param> /// <returns></returns> public static T Mapping(XElement element, IConvertCaseStrategy convertCaseStrategy = null) { return((T)_superConfigEngine.Mapping(typeof(T), element, convertCaseStrategy)); }
public SettingSuperConfigStrategy(IConvertCaseStrategy convertCaseStrategy, Func <string, string, IConvertCaseStrategy, Section> funcSection) { _convertCaseStrategy = convertCaseStrategy; _funcSection = funcSection; }
public DefaultSuperConfigStrategy(IConvertCaseStrategy convertCaseStrategy) { _convertCaseStrategy = convertCaseStrategy; }