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,

Другие вопросы по тегам