AutoMapper отображает объект на любой унаследованный тип назначения
Давайте иметь класс DTO:
public class UserDto {
public int Id { get;set; }
}
И класс viewmodel (базовая библиотека проекта mvc):
public abstract class UserViewModelBase {
public int Id { get;set; }
}
Теперь, когда я создаю отображение для Autopper, как это:
Mapper.CreateMap<UserDto, UserViewModelBase>();
В основном веб-проекте MVC у меня есть конкретная реализация UserViewModelBase, как это:
public class UserViewModel: UserViewModelBase {
}
Теперь, когда я называю это:
Mapper.Map<UserDto, UserViewModel>()
это терпит неудачу с такой ошибкой:
Отсутствует конфигурация карты типов или неподдерживаемое отображение.
UserDto -> UserViewModel
Как я понимаю, это было вызвано тем, что я не определил прямое сопоставление между UserDto и UserViewModel. Я хочу знать, если есть какой-то способ, как сказать AutoMapper, что с этой картой Mapper.CreateMap<UserDto, UserViewModelBase>();
он должен принимать любой тип как тип назначения, который наследуется от UserViewModelBase
,
1 ответ
Кажется, никто не знает, как этого добиться, поэтому я сделал обходной путь для этого.
Мой обходной путь заключался в построении отображений (используя Mapper.CreateMap(...)
) несколько раз каждый с конкретным целевым классом, как:
в ClassLibrary1:
Mapper.CreateMap<UserDto, UserViewModel1>();
во втором ClassLibrary2:
Mapper.CreateMap<UserDto, UserViewModel2>();
даже если UserViewModel1 и UserViewModel2 являются производными от одного базового класса UserViewModelBase
,