Я пытаюсь настроить autopper для использования функции ProjectTo
. Проблема в том, что объект, который я пытаюсь извлечь из базы данных, содержит элемент интерфейса. Физически все IInnerItems
производные хранятся в 2 таблицах. Значения элемента Inner
должны быть разрешены автоматически (без создания объекта вручную и заполнения его всеми значениями). Содержащий объект также содержит значение перечисления, которое можно использовать для определения типа внутреннего объекта. QueryableExtensions
не поддерживает MapFrom
и ConvertUsing
методы, основанные на выражениях, поэтому я не могу автоматически сопоставить innerItem.
Полученное исключение:
Тип 'IInnerItem' не имеет конструктора по умолчанию
Это примерно то, что я пытаюсь сделать:
// class structure
public interface IInnerItem { ... }
public class InnerItem1 : IInnerItem { ... }
public class InnerItem2 : IInnerItem { ... }
public class InnerItemDto { ... }
public class InnerItemDto1 : InnerItemDto { ... }
public class InnerItemDto2 : InnerItemDto { ... }
public class MainObject {
public IInnerItem InnerItem { get; set;}
public InnerItemType Type { get; set; }
// ...
}
public class MainObjectDto {
public InnerItemDto InnerItem { get; set;}
public InnerItemType Type { get; set; }
// ...
}
// mapping config
CreateMap<MainObjectDto, MainObject>()
.ForMember(x => x.InnerItem, opt => opt.MapFrom(src => src.InnerItem));
CreateMap<InnerItemDto, IInnerItem>()
.Include<InnerItemDto, InnerItem1>()
.Include<InnerItemDto, InnerItem2>();
CreateMap<InnerItemDto1, InnerItem1>();
CreateMap<InnerItemDto2, InnerItem2>();
Заранее спасибо!