Здравствуйте, я не могу получить мои сопоставления, работающие в унаследованном классе. Идея заключается в создании карты для базового объекта и интерфейса только один раз, а когда дочерние классы реализуют свои собственные члены, настройте отображение nly для тех членов, которые не определены в базовом классе или внутри.Automapper 5.1.1 сопоставление наследования
Позвольте мне привести пример кода.
public class DtoClass {
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
}
public interface IField3 {
public string EntityField3 { get; set; }
}
public class BaseEntityClass {
public string EntityField1 { get; set; }
}
public class ChildEntityClass : BaseEntityClass, IField3 {
public string EntityField2 { get; set; }
public string EntityField3 { get; set; }
}
CreateMap<BaseEntityClass, DtoClass>()
.ForMember(c => c.Field1 , m => m.MapFrom(a => a.EntityField1))
.Include<ChildEntityClass, DtoClass>();
CreateMap<IField3, DtoClass>()
.ForMember(c => c.Field3 , m => m.MapFrom(a => a.EntityField3));
CreateMap<ChildEntityClass, DtoClass>()
.ForMember(c => c.Field2 , m => m.MapFrom(a => a.EntityField2));
Прилагается код dosnt work ofcourse. при вызове:
AutoMapper.Mapper.Map<ChildEntityClass, DtoClass>(instanceOfChildEntityClass);
Я получаю только сопоставляются элементы, которые определены в CreateMap<ChildEntityClass, DtoClass>().
Любая идея, как только один раз реализовать отображения для базового класса и интерфейсов? И да, я хочу наметить все типы ChildEntityClass, BaseEntityClass и IField3 для DtoClass.
Любые подсказки приветствуются для элегантной конфигурации таких сопоставлений.
Edit: я удалить unecssary IncludeBase из подкласса для ясности, но ни один из обоих
- IncludeBase в подклассе - не включать в базовый класс работает для меня. Что может вызвать такие проблемы?
Нет, все еще не работает, вызывается только сопоставление, настроенное как последнее, без базового класса. Для меня не включается в базовый класс. И еще один вопрос: какой интерфейс? Я удалил IncludeBase <> в примере кода для ясности. – PabloPC
Убедитесь, что вы проверили свои профили, используя Mapper.AssertConfigurationIsValid(). Это может указывать на то, что вызывает проблемы. – Richard
Обновлен мой ответ, используя IncludeBase, который работает для меня, используя ваш пример кода. – Richard