从AutoMapper定义的映射中获取所有已定义的映射

时间:2011-07-25 11:52:29

标签: map expression automapper

我们假设我有两个类:CD和CDModel,映射定义如下:

Mapper.CreateMap<CDModel, CD>()
    .ForMember(c => c.Name, opt => opt.MapFrom(m => m.Title));

是否有一种简单的方法可以检索原始表达式,例如 c =&gt; c.Name (对于来源)和 m =&gt; m.Title (目的地)来自映射?

我试过这个,但我想念一些事情......

var map = Mapper.FindTypeMapFor<CDModel, CD>();
foreach (var propertMap in map.GetPropertyMaps())
{
    var source = ???;
    var dest = propertMap.DestinationProperty.MemberInfo;
}

如何获取源表达式和目标表达式?

3 个答案:

答案 0 :(得分:11)

沿着与你正在做的事情相同的路径......

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

你究竟想要这些表达方式?你想要底层的Lambas吗?

若是,请看

propertMap.GetSourceValueResolvers()

答案 1 :(得分:1)

我也发现var map = Mapper.GetAllTypeMaps();也很有用,因为您可以搜索 SourceType DestinationType

答案 2 :(得分:1)

我正在使用Automapper 7.0,语法现在有所不同。例如,

void Dump(TypeMap map)
{
    Console.WriteLine("---------------------------------------------------------------------");
    Console.WriteLine(map.SourceType + " ==> " + map.DestinationType);
    foreach (var m in map.GetPropertyMaps())
    {
        Console.WriteLine(m.SourceMember.Name + " ==> " + m.DestinationProperty.Name);
    }
}

然后您可以使用:

Dump(Mapper.Instance.ConfigurationProvider.FindTypeMapFor(typeof(CDModel), typeof(CD)));

或者如果您想丢弃所有内容,请这样做。

foreach (var map in Mapper.Instance.ConfigurationProvider.GetAllTypeMaps())
{
    Dump(map);
}