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); }
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)); } }