AutoMapper(v2.2)で、ソースタイプは同じで宛先タイプが異なるマップに継承マッピングを使用できますか?
私にはこの基本的な状況があります(実際のクラスにはさらに多くのプロパティがあります):
public abstract class BaseViewModel
{
public int CommonProperty { get; set;}
}
public class ViewModelA : BaseViewModel
{
public int PropertyA { get; set; }
}
public class ViewModelB : BaseViewModel
{
public int PropertyB { get; set; }
}
ViewModelA
とViewModelB
は同じエンティティクラスの異なる表現です。
public class Entity
{
public int Property1 { get; set; }
public int Property2 { get; set; }
public int Property3 { get; set; }
}
BaseViewModel
次のように、ViewModelごとに同じマッピングを再利用したいと思います。
Mapper.CreateMap<Entity, BaseViewModel>()
.Include<Entity, ViewModelA>()
.Include<Entity, ViewModelB>()
.ForMember(x => x.CommonProperty, y => y.MapFrom(z => z.Property1));
Mapper.CreateMap<Entity, ViewModelA>()
.ForMember(x => x.PropertyA, y => y.MapFrom(z => z.Property2));
Mapper.CreateMap<Entity, ViewModelB>()
.ForMember(x => x.PropertyB, y => y.MapFrom(z => z.Property3));
しかし、残念ながら、これは機能していないようです。次のような呼び出し:
var model = Mapper.Map<Entity, ViewModelA>(entity);
マッピングされますmodel
がPropertyA
、マッピングされませんCommonProperty
。https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritanceの例に正しく従っていると思いますが、同じソースタイプで複数のマップを作成すると、AutoMapperが作動しなくなるのではないかと思います。
洞察はありますか?基本クラスのマッピングをグループ化するというアイデアは気に入っていますが、これはうまくいかないようです。