protected virtual MemberMapper CreateMemberMapper(MapMemberInfo mapMemberInfo) { if (mapMemberInfo == null) { throw new ArgumentNullException("mapMemberInfo"); } MemberMapper mm = null; MemberMapperAttribute attr = mapMemberInfo.MemberAccessor.GetAttribute <MemberMapperAttribute>(); if (attr == null) { object[] attrs = TypeHelper.GetAttributes(mapMemberInfo.Type, typeof(MemberMapperAttribute)); foreach (MemberMapperAttribute a in attrs) { if (a.MemberType == null) { mm = a.MemberMapper; break; } } } else { mm = attr.MemberMapper; } if (mm == null) { object[] attrs = TypeHelper.GetAttributes( mapMemberInfo.MemberAccessor.MemberInfo.DeclaringType, typeof(MemberMapperAttribute)); foreach (MemberMapperAttribute a in attrs) { if (a.MemberType == mapMemberInfo.Type) { mm = a.MemberMapper; break; } } } if (mm == null) { mm = MemberMapper.CreateMemberMapper(mapMemberInfo); } mm.Init(mapMemberInfo); return(mm); }
protected virtual MemberMapper CreateMemberMapper(MapMemberInfo mapMemberInfo) { if (mapMemberInfo == null) { throw new ArgumentNullException("mapMemberInfo"); } MemberMapper mm = null; var attr = mapMemberInfo.MemberAccessor.GetAttribute <MemberMapperAttribute>(); MemberExtension ext; if (_extension != null && _extension.Members.TryGetValue(mapMemberInfo.MemberName, out ext)) { AttributeExtensionCollection attrExt; if (ext.Attributes.TryGetValue("MemberMapper", out attrExt)) { attr = new MemberMapperAttribute((Type)attrExt[0].Values["MemberMapperType"]); } } if (attr == null) { var attrs = TypeHelper.GetAttributes(mapMemberInfo.Type, typeof(MemberMapperAttribute)); foreach (MemberMapperAttribute a in attrs) { if (a.MemberType == null) { mm = a.MemberMapper; break; } } } else { mm = attr.MemberMapper; } if (mm == null) { var attrs = TypeHelper.GetAttributes( mapMemberInfo.MemberAccessor.MemberInfo.DeclaringType, typeof(MemberMapperAttribute)); foreach (MemberMapperAttribute a in attrs) { if (a.MemberType == mapMemberInfo.Type) { mm = a.MemberMapper; break; } } } if (mm == null) { mm = MemberMapper.CreateMemberMapper(mapMemberInfo); } mm.Init(mapMemberInfo); return(mm); }