Получить все определенные сопоставления из заданного AutoMapper сопоставления

Предположим, что у меня есть два класса: CD и CDModel, а отображение определяется следующим образом:

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

Есть ли простой способ получить исходное выражение , например c = > c.Name(для источника) и m = > m.Title(для адресата) из сопоставления?

Я пробовал это, но я пропускаю некоторые вещи...

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

Как получить исходное и конечное выражения?

Ответ 1

Идти по тому же пути, что и вы делали...

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

Как именно вы хотите выражения? Вы хотите, чтобы основные Lambas?

Если вы посмотрите

propertMap.GetSourceValueResolvers()

Ответ 2

Я также считаю, что var map = Mapper.GetAllTypeMaps(); тоже полезен, так как вы можете искать SourceType или DestinationType.

Ответ 3

Я использую 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);
}