Пример #1
0
        public IMemberConfiguration <T, TN> Register <T, TN>(IMemberConfigParameters baseType)
        {
            var memberConfiguration = this.Register <T, TN>();
            var src      = typeof(T);
            var dest     = typeof(TN);
            var cacheKey = this.CalculateCacheKey(src, dest);

            if (this.SourceService.TypeMappers.ContainsKey(cacheKey) && this.DestinationService.TypeMappers.ContainsKey(cacheKey))
            {
                var typeMapper = this.SourceService.TypeMappers[cacheKey] as ITypeMapper <T, TN>;
                typeMapper?.ImportMemberConfigParameters(baseType);
            }
            return(memberConfiguration);
        }
Пример #2
0
        public void ImportMemberConfigParameters(IMemberConfigParameters baseClassConfiguration)
        {
            this.Flattened               = baseClassConfiguration.Flattened;
            this.CaseSensetiveMember     = baseClassConfiguration.CaseSensetiveMember;
            this.CaseSensetiveOverride   = baseClassConfiguration.CaseSensetiveOverride;
            this.CompilationTypeOverride = baseClassConfiguration.CompilationTypeOverride;
            this.CompilationTypeMember   = baseClassConfiguration.CompilationTypeMember;

            // todo : implement visitor to replace base type to the subclass' type
            this.CustomFunctionMembers =
                new List <KeyValuePair <MemberExpression, Expression> >(baseClassConfiguration.CustomFunctionMembers
                                                                        .Count);
            this.CustomMembers =
                new List <KeyValuePair <MemberExpression, Expression> >(baseClassConfiguration.CustomMembers.Count);
            this.FlattenMembers =
                new List <KeyValuePair <MemberExpression, Expression> >(baseClassConfiguration.FlattenMembers.Count);

            this.IgnoreMemberList =
                new List <string>(baseClassConfiguration.IgnoreMemberList);

            var replaceDestMemberTypeVisitor = new ReplaceMemberTypeVisitor(this.DestinationType, this.DestFakeParameter);
            var replaceSrcMemberTypeVisitor  = new ReplaceMemberTypeVisitor(this.SourceType, this.SourceParameter);

            foreach (var customMember in baseClassConfiguration.CustomMembers)
            {
                var destExp = replaceDestMemberTypeVisitor.Visit(customMember.Key) as MemberExpression;
                var srcExp  = replaceSrcMemberTypeVisitor.Visit(customMember.Value);
                this.CustomMembers.Add(new KeyValuePair <MemberExpression, Expression>(destExp, srcExp));
            }

            foreach (var customMember in baseClassConfiguration.CustomFunctionMembers)
            {
                var destExp = replaceDestMemberTypeVisitor.Visit(customMember.Key) as MemberExpression;
                var srcExp  = replaceSrcMemberTypeVisitor.Visit(customMember.Value);
                this.CustomFunctionMembers.Add(new KeyValuePair <MemberExpression, Expression>(destExp, srcExp));
            }

            foreach (var customMember in baseClassConfiguration.FlattenMembers)
            {
                var destExp = replaceDestMemberTypeVisitor.Visit(customMember.Key) as MemberExpression;
                var srcExp  = replaceSrcMemberTypeVisitor.Visit(customMember.Value);
                this.FlattenMembers.Add(new KeyValuePair <MemberExpression, Expression>(destExp, srcExp));
            }
        }