使用 ForMember 从自定义映射中提取 AutoMapper 源名称

4

我成功地使用以下代码从现有的Automapper TypeMap中提取了简单的源/目标对:

private MemberInfo getSource(Type destinationType, string destinationPropertyname)
{
  TypeMap map = Mapper.GetAllTypeMaps()
                      .Where(m => m.DestinationType.Equals(destinationType))
                      .First();
  IEnumerable<PropertyMap> properties = 
      map.GetPropertyMaps()
         .Where(p => p.DestinationProperty
                      .Name
                      .Equals(destinationPropertyname, 
                              StringComparison.CurrentCultureIgnoreCase));
  PropertyMap sourceProperty = properties.First();
  IMemberGetter mg = sourceProperty.GetSourceValueResolvers()
                                   .Cast<IMemberGetter>()
                                   .First();

  return mg.MemberInfo;
}

然而,当我添加自定义列映射时,就像这样:

Mapper.CreateMap<Customer, CustomerViewModel>()
      .ForMember(dest => dest.Cell, opt => opt.MapFrom(src => src.CellPhone))
      .ForMember(dest => dest.Email, opt => opt.MapFrom(src => src.EmailAddress));

...我所知道的,映射的源部分无法从GetSourceResolvers()中获取。

感谢您提供的任何指导。

谢谢。

-Jessy Houle


我很好奇你为什么需要从AutoMapper中获取这些信息?你在使用AutoMapper的哪种情况下需要从外部深入了解它的内部机制呢? - PatrickSteele
Patrick,我正在尝试将领域层的验证结果映射到视图模型层。直接自动命名映射很容易获取,但是超出此范围的任何内容都很难获得映射(例如:公式映射等)。 - Jessy Houle
1个回答

0

这符合您的要求吗?

var map = Mapper.FindTypeMapFor<Customer, CustomerViewModel>();

foreach( var propertMap in map.GetPropertyMaps() )
{
    var dest = propertMap.DestinationProperty.MemberInfo;
    var source = propertMap.SourceMember;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接