Получить все определенные сопоставления из определенного сопоставления AutoMapper - PullRequest
11 голосов
/ 25 июля 2011

Давайте предположим, что у меня есть два класса: 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;
}

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

Ответы [ 3 ]

11 голосов
/ 01 августа 2011

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

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

Как именно вы хотите выражения? Вы хотите базовый Lambas?

Если это так, посмотрите на

propertMap.GetSourceValueResolvers()
1 голос
/ 22 января 2019

Я использую 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);
}
1 голос
/ 05 декабря 2016

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

...