in tools/AutoMapper/Configuration/MappingExpression.cs [561:629]
private IPropertyMapConfiguration GetDestinationMemberConfiguration(MemberInfo destinationMember) =>
_memberConfigurations.FirstOrDefault(m => m.DestinationMember == destinationMember);
public void Configure(TypeMap typeMap)
{
foreach (var destProperty in typeMap.DestinationTypeDetails.PublicWriteAccessors)
{
var attrs = destProperty.GetCustomAttributes(true);
if (attrs.Any(x => x is IgnoreMapAttribute))
{
IgnoreDestinationMember(destProperty);
var sourceProperty = typeMap.SourceType.GetInheritedMember(destProperty.Name);
if (sourceProperty != null)
{
_reverseMap?.IgnoreDestinationMember(sourceProperty);
}
}
if (typeMap.Profile.GlobalIgnores.Contains(destProperty.Name) && GetDestinationMemberConfiguration(destProperty) == null)
{
IgnoreDestinationMember(destProperty);
}
}
if (_allMemberOptions != null)
{
foreach (var accessor in typeMap.DestinationTypeDetails.PublicReadAccessors.Where(_memberFilter))
{
ForDestinationMember(accessor, _allMemberOptions);
}
}
foreach (var action in TypeMapActions)
{
action(typeMap);
}
foreach (var memberConfig in _memberConfigurations)
{
memberConfig.Configure(typeMap);
}
foreach (var memberConfig in _sourceMemberConfigurations)
{
memberConfig.Configure(typeMap);
}
foreach (var paramConfig in _ctorParamConfigurations)
{
paramConfig.Configure(typeMap);
}
foreach (var valueTransformer in _valueTransformers)
{
typeMap.AddValueTransformation(valueTransformer);
}
if (_reverseMap != null)
{
ReverseSourceMembers(typeMap);
foreach(var destProperty in typeMap.GetPropertyMaps().Where(pm => pm.Ignored))
{
_reverseMap.ForSourceMember(destProperty.DestinationProperty.Name, opt => opt.Ignore());
}
foreach(var includedDerivedType in typeMap.IncludedDerivedTypes)
{
_reverseMap.Include(includedDerivedType.DestinationType, includedDerivedType.SourceType);
}
foreach(var includedBaseType in typeMap.IncludedBaseTypes)
{
_reverseMap.IncludeBase(includedBaseType.DestinationType, includedBaseType.SourceType);
}
}
}