我想根据源中的属性值将基类映射到多个派生类之一。到目前为止我已经有了这个,但它看起来有点笨拙和丑陋。有更好的办法吗?
Mapper.CreateMap<DTO.BaseData, BaseData>()
.ConstructUsing(src =>
{
switch (src.Type)
{
case 0:
return new FtpData(src.Id, src.Content);
// many more case statements in here.....
}
return new NullData();
});
您走在正确的道路上。尽管在 switch 语句中,我建议您针对特定类型使用映射器语句。您可以通过使用
ConstructUsing
中的上下文来做到这一点
使用 C# 8.0 或更高版本,您也可以简化 switch 语句
Mapper.CreateMap<DTO.BaseData, BaseData>()
.ConstructUsing((src,context) => src.Type switch
{
0 => context.Mapper.Map<FtpData>()
1 -> context.Mapper.Map<FooBar>()
_ => throw new ArgumentOutOfRangeException($"Unexpected Type {src.Type}"
});