Я использую:
- .net core v2.2.0
- Microsoft.EntityFrameworkCore v2.2.4
- automapper v8.1.1
- AutoMapper.Extensions.Microsoft.DependencyInjection v6.1.1
- VS2017 Community Edition v15.9.12
В моем решении у меня есть:
- TVC_DATA: обрабатывает весь доступ к данным и содержит классы профиля сопоставления
- TVC_PORTAL: реагировать на веб-приложение
У меня есть автоматическая настройка, использующая внедрение зависимостей, следуя инструкциям, описанным здесь
Итак: в файле startup.cs TVC_PORTAL в методе ConfigureServices у меня есть:
services.AddAutoMapper(typeof(AutomapProfileGen));
, где я использую AutoMapProfileGen - один из типов маркеров для AddAutoMapper для определения местоположения сборки TVC_DATA, где также расположены другие профили.
В моем ObjectController я вставляю IMapper:
public ObjectController(IHostingEnvironment environment, IMapper mapper)
{
_hostingEnvironment = environment;
_mapper = mapper;
}
И я использую маппер позже:
IEnumerable<ObjectViewType> vList = _mapper.Map<IEnumerable<ObjectType>, IEnumerable<ObjectViewType>>(mList);
Мои профили довольно просты, например:
public class AutomapProfileSrc : Profile
{
public AutomapProfileSrc()
{
//source data
CreateMap<AirlineView, Airline>().ReverseMap();
CreateMap<AirlineListView, Airline>().ReverseMap();
CreateMap<AirportView, Airport>().ReverseMap();
CreateMap<AirportListView, Airport>().ReverseMap();
CreateMap<CountryView, Country>().ReverseMap();
CreateMap<CountryListView, Country>().ReverseMap();
}
}
Мой вопрос: я хочу установить некоторые глобальные параметры конфигурации для автомаппера и не могу понять, где / как их установить. Например: я хочу установить для ValidateInlineMaps значение false (потому что это упоминалось как решение, когда AssertConfigurationIsValid выбрасывает исключения «элемент не сопоставлен»). Также я хочу установить MaxDepth на 1 для всех карт, чтобы избежать циклических ссылок. Что я пробовал:
1) Установите для ValidateInlineMaps значение false во всех конструкторах профиля: не работает.
public class AutomapProfileCfg : Profile
{
public AutomapProfileCfg()
{
ValidateInlineMaps = false;
...
2) Создайте объект MapperConfiguration в ConfigureServices, например:
'var config = new MapperConfiguration(cfg =>
{
cfg.ForAllMaps((typeMap, mappingExpression) => { mappingExpression.MaxDepth(1); });
cfg.AllowNullCollections = true;
cfg.ValidateInlineMaps = false;
//cfg.Advanced.MaxExecutionPlanDepth = 1;
});'
Но я не знаю, как связать его с экземпляром mapper: просто создание не меняет поведение mapper.
Уже почти сутки изучаю документацию и ищу этот сайт: расстраиваюсь, потому что похоже, что это должно быть просто .... но почему-то я не могу заставить его работать. Любая помощь будет высоко ценится