Могу ли я использовать сопоставление наследования в 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
- разные представления одного и того же класса Entity:
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 вверх.
Любые идеи? Мне нравится идея группировки сопоставлений базового класса вместе, но это, похоже, не работает.