我有以下课程:
来源:
public class Source
{
public int Amount { get; set; }
}
目的地:
public class Parent
{
public ChildBase Child { get; set; }
}
public class ChildBase
{
}
public class Child : ChildBase
{
public int Amount { get; set; }
}
对于我尝试创建的地图,我想从Source
映射到Parent
。 Parent
上的媒体资源定义为ChildBase
,但我希望地图实际映射到Child
。如何让映射器映射到Child
?
我有一个简单的地图定义为:
CreateMap<Source, Parent>()
.ForMember(d => d.Child, opt => opt.MapFrom(s => s));
CreateMap<Source, Child>();
但显然这是在寻找目的地为ChildBase
的地图。我尝试将目标转换为Child
,但这并不起作用。
有什么想法吗?
答案 0 :(得分:0)
您需要在AutoMapper中使用自定义ValueResolver。
Mapper.CreateMap<Source, Parent>()
.ForMember(p => p.Child, o => o.ResolveUsing(s => new Child { Amount = s.Amount }));
如果要重用此逻辑,可以将代码放入类而不是lambda表达式。
class SourceToChildValueResolver : ValueResolver<Source, Child>
{
protected override Child ResolveCore(Source source)
{
return new Child { Amount = source.Amount };
}
}
//register the resolver
CreateMap<Source, Parent>()
.ForMember(p => p.Child, o => o.ResolveUsing<SourceToChildValueResolver>());