/// <summary> /// Applies the convention to type member mappings. /// </summary> /// <param name="context">The context to apply convensions.</param> public void Apply(ConventionContext context) { MemberMapOptions options = context.Options == MemberMapOptions.Default ? Options : context.Options; bool includeNonPublic = (options & MemberMapOptions.NonPublic) == MemberMapOptions.NonPublic; MappingMember[] targetMembers = context.TargetMembers.Where(member => member.CanWrite(includeNonPublic)).ToArray(); MappingMember[] sourceMembers = context.SourceMembers.Where(member => member.CanRead(includeNonPublic)).ToArray(); StringComparison comparison = (options & MemberMapOptions.IgnoreCase) == MemberMapOptions.IgnoreCase ? StringComparison.CurrentCultureIgnoreCase : StringComparison.CurrentCulture; bool hierarchy = (options & MemberMapOptions.Hierarchy) == MemberMapOptions.Hierarchy; foreach (MappingMember targetMember in targetMembers) { foreach (MappingMember sourceMember in sourceMembers) { if (string.Equals(sourceMember.MemberName, targetMember.MemberName, comparison) && (hierarchy || targetMember.MemberType.IsAssignableFrom(sourceMember.MemberType) || context.Converters.Get(sourceMember.MemberType, targetMember.MemberType) != null)) { context.Mappings.Set(sourceMember, targetMember); break; } } } }
internal void Apply(ConventionContext context) { foreach (IConvention convension in _convensions) { convension.Apply(context); } }
public void Apply(ConventionContext context) { if (_action != null) { _action(context); } }
private void Initialize() { if (!_initialized) { Thread.MemoryBarrier(); lock (_lockObj) { if (!_initialized) { var context = new ConventionContext(_container, typeof(TSource), typeof(TTarget), _options); _container.Conventions.Apply(context); _targetMembers = context.TargetMembers; _memberMappers = new MemberMapperCollection(_container, _options); foreach (MemberMapping mapping in context.Mappings) { _memberMappers.Set(mapping.TargetMember, mapping.SourceMember, mapping.Converter); } _initialized = true; } } } }