У меня есть базовый классAutomapper абстрактный класс
public abstract class DtoBase //NOTICE that this class is abstract
{
//some DTO specific things
}
public class concreteA_Dto : DtoBase
{
//some properties from A
}
public class concreteB_Dto : DtoBase
{
//some properties from B
}
, а затем у меня есть некоторые классы, и они не знают друг друга и
public class concreteA //NOTICE that there is NO base class
{
//some properties from A
}
public class concreteB
{
//some properties from B
}
Что я хочу использовать Automapper таким образом:
private DtoBase GetResourceDto(object value)
{
return Mapper.Map<DtoBase>(value);
}
До сих пор мое сопоставление выглядело так:
CreateMap<concreteA, DtoBase>()
.Include<concreteA, concreteA_Dto>();
CreateMap<concreteA, concreteA_Dto>();
Но когда я называю метод GetResourceDto с некоторым экземпляром concreteA я получит
Automapper исключение:
Mapping types:
concreteA-> DtoBase
#NAMESPACE.concreteA -> #NAMESPACE.DtoBase
Destination path:
DtoBase
с внутренним исключением не может быть создана
Экземпляры абстрактных классов.
Обратите внимание, что #NAMESPACE мое пространство имен класса
Как выполнить правильное отображение, которое позволит избежать этого исключения?
Идея заключается в том, что concreteA и concreteB может dynamicaly расти во времени и там может быть Concretec, забетонированы и т.д. Я не возражаю, добавив отображения для более конкретных классов
Вы не можете отобразить на абстрактный класс, AutoMapper создает новый экземпляр класса вы отображающие до и, как говорит об ошибке, вы не можете создать экземпляр абстрактного класса. Сделайте свой базовый класс конкретным, и он будет работать, абстрактный класс не подходит, потому что вы хотите создать его экземпляры. –
На самом деле я не хочу создавать экземпляр DtoBase, который я ожидаю как возвращаемое значение из GetResourceDto, является экземпляром конкретногоA_Dto. – LightCZ
При использовании automapper, как это, иерархии классов должны совпадать. Если вы создаете базовый класс в «конкретной» иерархии, все должно работать нормально. –