Как зарегистрировать AutoMapper 4 с помощью простого инжектора 3
У меня есть веб-задание Azure, которое анализирует CSV-категории и отображает результат в обычные объекты.
Я пытаюсь скопировать конфигурацию AutoMapper + Simple Injector из одного проекта в другой по памяти, но получаю сообщение об ошибке:
AutoMapper.AutoMapperMappingException: отсутствует конфигурация карты типов или не поддерживается отображение.
Типы картографирования:
CsvCategory -> Категория
WebJobs.Data.CsvCategory -> Data.Category
Путь назначения: Категория
Исходное значение: WebJobs.Data.CsvCategory
container.RegisterSingleton<ITypeMapFactory, TypeMapFactory>();
container.RegisterCollection<IObjectMapper>(MapperRegistry.Mappers);
container.RegisterSingleton<ConfigurationStore>();
container.RegisterSingleton<IConfiguration, ConfigurationStore>();
container.RegisterSingleton<IConfigurationProvider, ConfigurationStore>();
container.RegisterSingleton<IMappingEngine>(Mapper.Engine);
Mapper.Initialize(c =>
{
c.ConstructServicesUsing(container.GetInstance);
c.AddProfile<CsvCategoryMappingProfile>();
});
public sealed class CsvCategoryMappingProfile : Profile
{
protected override void Configure() {
CreateMap<CsvCategory, Category>();
}
public override string ProfileName {
get { return typeof(CsvCategoryMappingProfile).Name; }
}
}
public sealed class MappingCategoryConverter : IConverter<CsvCategory, Category>
{
private readonly IMappingEngine _mapper;
public MappingCategoryConverter(IMappingEngine mapper)
{
_mapper = mapper;
}
public Category Convert(CsvCategory category)
{
return _mapper.Map<Category>(category);
}
}
Я могу это исправить, заменив всю конфигурацию контейнера этой строкой:
Mapper.AddProfile<CsvCategoryMappingProfile>();
но вместо этого я хотел бы узнать, где проблема, где я делаю это неправильно.
1 ответ
Я не вижу, как использовать Mapper.Initialize()
правильно, очевидный способ не работает.
Вот обходной путь:
Mapper.Initialize(x =>
{
var config = container.GetInstance<IConfiguration>();
config.ConstructServicesUsing(container.GetInstance);
config.AddProfile<CsvCategoryMappingProfile>();
});
Потому что в x
вы получаете еще один экземпляр IConfiguration
,