예제 #1
0
        private static bool ProcessCustomResolvers(TypeAdapterConfigSettings <TSource, TDestination> config, MemberInfo destinationMember,
                                                   Func <object> propertyModelFactory, List <PropertyModel <TSource, TDestination> > properties,
                                                   IDictionary <Type, Func <object, object> > destinationTransforms)
        {
            var resolvers = config.Resolvers;

            if (resolvers != null && resolvers.Count > 0)
            {
                //Todo: Evaluate this to convert to foreach
                bool hasCustomResolve = false;
                for (int j = 0; j < resolvers.Count; j++)
                {
                    var resolver = resolvers[j];
                    if (destinationMember.Name.Equals(resolver.MemberName))
                    {
                        var destinationProperty = (PropertyInfo)destinationMember;

                        var setter = PropertyCaller <TDestination> .CreateSetMethod(destinationProperty);

                        if (setter == null)
                        {
                            continue;
                        }

                        var propertyModel = (PropertyModel <TSource, TDestination>)propertyModelFactory();
                        propertyModel.ConvertType        = 5;
                        propertyModel.Setter             = setter;
                        propertyModel.SetterPropertyName = ExtractPropertyName(setter, "Set");
                        propertyModel.CustomResolver     = resolver.Invoker;
                        propertyModel.Condition          = resolver.Condition;
                        var destinationPropertyType = typeof(TDestination);
                        if (destinationTransforms.ContainsKey(destinationPropertyType))
                        {
                            propertyModel.DestinationTransform = destinationTransforms[destinationPropertyType];
                        }

                        properties.Add(propertyModel);

                        hasCustomResolve = true;
                        break;
                    }
                }
                if (hasCustomResolve)
                {
                    return(true);
                }
            }
            return(false);
        }
예제 #2
0
        private static bool ProcessIgnores(TypeAdapterConfigSettings <TSource, TDestination> config, MemberInfo destinationMember)
        {
            var ignoreMembers = config.IgnoreMembers;

            if (ignoreMembers != null && ignoreMembers.Count > 0)
            {
                bool ignored = false;
                for (int j = 0; j < ignoreMembers.Count; j++)
                {
                    if (destinationMember.Name.Equals(ignoreMembers[j]))
                    {
                        ignored = true;
                        break;
                    }
                }
                if (ignored)
                {
                    return(true);
                }
            }
            return(false);
        }