如何在Simple Injector 3中注册AutoMapper 4



我有一个Azure web作业,它解析包含类别的CSV并将结果映射到常规对象。

我试图复制AutoMapper +简单注入器配置从一个项目在另一个内存,但得到一个错误:

AutoMapper。AutoMapperMappingException:缺少类型映射配置或不支持映射。

映射类型:

CsvCategory→类别

WebJobs.Data。CsvCategory→数据。类别

目的地路径:类别

源值: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>();

而是我想知道问题在哪里,我在哪里做错了

我不知道如何正确使用Mapper.Initialize(),明显的方法不起作用。

这里有一个解决方法:

Mapper.Initialize(x =>
{
    var config = container.GetInstance<IConfiguration>();
    config.ConstructServicesUsing(container.GetInstance);
    config.AddProfile<CsvCategoryMappingProfile>();
});

因为在x你得到了另一个IConfiguration的实例

相关内容

  • 没有找到相关文章

最新更新