Ejemplo n.º 1
0
 private static void SearchMapperProvider(IEnumerable <Assembly> assemblies)
 {
     foreach (Assembly assembly in assemblies)
     {
         Type[] types = assembly.GetTypes();
         for (int i = 0; i < (int)types.Length; i++)
         {
             Type type = types[i];
             MapperProviderAttribute customAttribute = type.GetTypeInfo().GetCustomAttribute <MapperProviderAttribute>();
             if (customAttribute != null && !MapperProvider.MapperProviderType.ContainsKey(customAttribute.Name))
             {
                 MapperProvider.MapperProviderType.Add(customAttribute.Name, type);
             }
         }
     }
 }
Ejemplo n.º 2
0
        public static void CreateMapperMember(object model)
        {
            Type type = model.GetType();
            List <BaseMapperService.MapperMemberInfo> mapperMemberInfos = null;

            if (!BaseMapperService.mapperMemberInfo.TryGetValue(type, out mapperMemberInfos))
            {
                lock (BaseMapperService._lock)
                {
                    if (!BaseMapperService.mapperMemberInfo.TryGetValue(type, out mapperMemberInfos))
                    {
                        mapperMemberInfos = new List <BaseMapperService.MapperMemberInfo>();
                        FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                        for (int i = 0; i < (int)fields.Length; i++)
                        {
                            FieldInfo fieldInfo = fields[i];
                            Type      fieldType = fieldInfo.FieldType;
                            TypeInfo  typeInfo  = fieldType.GetTypeInfo();
                            if (typeInfo.ImplementedInterfaces.Contains <Type>(typeof(IMapper)) && !typeInfo.IsSubclassOf(typeof(BaseMapper)) && fieldInfo.GetValue(model) == null)
                            {
                                List <ProviderParameterAttribute> list                        = fieldType.GetCustomAttributes <ProviderParameterAttribute>().ToList <ProviderParameterAttribute>();
                                MapperProviderAttribute           customAttribute             = fieldInfo.GetCustomAttribute <MapperProviderAttribute>();
                                List <ProviderParameterAttribute> providerParameterAttributes = fieldInfo.GetCustomAttributes <ProviderParameterAttribute>().ToList <ProviderParameterAttribute>();
                                foreach (ProviderParameterAttribute providerParameterAttribute in list)
                                {
                                    if (providerParameterAttributes.Exists((ProviderParameterAttribute p) => p.Name == providerParameterAttribute.Name))
                                    {
                                        continue;
                                    }
                                    providerParameterAttributes.Add(providerParameterAttribute);
                                }
                                if (customAttribute != null)
                                {
                                    MapperProvider mapperProvider = MapperProvider.CreateProvider(customAttribute.Name);
                                    mapperMemberInfos.Add(new BaseMapperService.MapperMemberInfo()
                                    {
                                        Field     = fieldInfo,
                                        Type      = fieldType,
                                        Parameter = list,
                                        Provider  = mapperProvider
                                    });
                                }
                                else
                                {
                                    mapperMemberInfos.Add(new BaseMapperService.MapperMemberInfo()
                                    {
                                        Field     = fieldInfo,
                                        Type      = fieldType,
                                        Parameter = list
                                    });
                                }
                            }
                        }
                        BaseMapperService.mapperMemberInfo.Add(type, mapperMemberInfos);
                    }
                }
            }
            foreach (BaseMapperService.MapperMemberInfo mapperMemberInfo in mapperMemberInfos)
            {
                IMapper mapper = BaseMapper.CreateMapper(mapperMemberInfo.Type, mapperMemberInfo.Provider);
                mapperMemberInfo.Field.SetValue(model, mapper);
            }
        }