У меня есть веб-API ASP. Net, который использовал Automapper 7.0.1 с сопоставлениями stati c. Я недавно обновился до Automapper 9.0.0, в котором нет отображения stati c. Итак, я использовал рекомендованный способ использования моего контейнера зависимостей (Unity Container) для регистрации экземпляров IMapper
и IConfigurationProvider
как синглетонов.
var config = AutoMapperConfig.GetMapperConfiguration();
_container.RegisterInstance<IConfigurationProvider>(config, new SingletonLifetimeManager());
_container.RegisterInstance<IMapper>(new Mapper(config), new SingletonLifetimeManager());
AutoMapperConfig.GetMapperConfiguration()
- это состояние c метод, который возвращает новый Config со всеми сопоставлениями.
public static MapperConfiguration GetMapperConfiguration()
{
return new MapperConfiguration(config =>
{
config.CreateMap<MyDtoReq, MyModel1>(MemberList.Destination);
config.CreateMap<MyModel1, MyDtoRes>(MemberList.Destination);
// other mappings
}
}
Затем я разрешил и использовал IMapper
в многочисленных сервисах, которые зарегистрированы в PerRequestLifetimeManager
, например:
_container.RegisterType<IService1, Service1>(new PerRequestLifetimeManager());
Я вижу, что Unity правильно разрешил и Services, и Mapper, но когда я вызываю Map()
, используя:
_service1.Mapper.Map<MyDtoRes>(myModel1ObjectInstance);
Это дает мне AutoMapperException, говорящее
Отсутствует тип Конфигурация карты или ошибка неподдерживаемого отображения
Я пробовал многие вещи, включая регистрацию объектов AutoMapper в качестве зависимостей PerRequest, даже в качестве Singletons, использующих класс stati c (без контейнера DI), но безрезультатно.
Я уверен, что мои сопоставления верны, потому что они работали со Stati c AutoMapper в версии 7.0.1. Что я упустил после обновления?