我们假设我有两个类: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;
}
如何获取源表达式和目标表达式?
答案 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);
}