Получить все определенные сопоставления из заданного 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);
}