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

C# 从AutoMapper定义的映射中获取所有已定义的映射,c#,dictionary,expression,automapper,C#,Dictionary,Expression,Automapper,假设我有两个类:CD和CDModel,映射定义如下: Mapper.CreateMap() .ForMember(c=>c.Name,opt=>opt.MapFrom(m=>m.Title)); 有没有一种简单的方法可以从映射中检索原始的表达式,比如c=>c.Name(用于源)和m=>m.Title(用于目标) 我试过了,但我错过了一些东西 var-map=Mapper.FindTypeMapFor(); foreach(map.GetPropertyMaps()中的var propertMa

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

Mapper.CreateMap()
.ForMember(c=>c.Name,opt=>opt.MapFrom(m=>m.Title));
有没有一种简单的方法可以从映射中检索原始的表达式,比如c=>c.Name(用于源)和m=>m.Title(用于目标)

我试过了,但我错过了一些东西

var-map=Mapper.FindTypeMapFor();
foreach(map.GetPropertyMaps()中的var propertMap)
{
var源=???;
var dest=propertMap.DestinationProperty.MemberInfo;
}

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

与您正在执行的操作的路径相同

foreach( var propertMap in map.GetPropertyMaps() )
{
    var dest = propertMap.DestinationProperty.MemberInfo;
    var source = propertMap.SourceMember;
}
你到底想要怎样的表达?你想要基本的羔羊肉吗

如果是的话,看看

propertMap.GetSourceValueResolvers()

我还发现
var-map=Mapper.GetAllTypeMaps()
也很有用,因为您可以搜索源类型目标类型

我正在使用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);
}

等价于AutoMapper 8中map.GetPropertyMaps()中的
var m?有关涵盖AutoMapper 7和8的解决方案,请参阅