C# 如何使用简单喷油器3注册AutoMapper 4

C# 如何使用简单喷油器3注册AutoMapper 4,c#,dependency-injection,automapper,simple-injector,automapper-4,C#,Dependency Injection,Automapper,Simple Injector,Automapper 4,我有一个Azure web作业,它解析包含类别的CSV并将结果映射到常规对象 我试图通过内存从一个项目复制AutoMapper+Simple Injector配置到另一个项目,但出现错误: AutoMapper.AutoMappingException:缺少类型映射配置或映射不受支持 映射类型: CSV类别->类别 WebJobs.Data.CsvCategory->Data.Category 目标路径: 类别 源值: WebJobs.Data.csv类别 container.RegisterS

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

我试图通过内存从一个项目复制AutoMapper+Simple Injector配置到另一个项目,但出现错误:

AutoMapper.AutoMappingException:缺少类型映射配置或映射不受支持

映射类型:

CSV类别->类别

WebJobs.Data.CsvCategory->Data.Category

目标路径: 类别

源值: WebJobs.Data.csv类别

container.RegisterSingleton();
容器.RegisterCollection(MapperRegistry.Mappers);
container.RegisterSingleton();
container.RegisterSingleton();
container.RegisterSingleton();
container.RegisterSingleton(Mapper.Engine);
初始化映射器(c=>
{
c、 ConstructionServiceSusing(container.GetInstance);
c、 AddProfile();
});
公共密封类CSVCategoryMapping配置文件:配置文件
{
受保护的覆盖无效配置(){
CreateMap();
}
公共重写字符串配置文件名{
获取{return typeof(CsvCategoryMappingProfile).Name;}
}
}
公共密封类MappingCategoryConverter:IConverter
{
专用只读IMappingEngine映射器;
公共映射类别转换器(IMappingEngine映射器)
{
_映射器=映射器;
}
公共类别转换(CSV类别)
{
返回_mapper.Map(类别);
}
}
我可以通过以下行替换整个容器配置来修复它:

Mapper.AddProfile<CsvCategoryMappingProfile>();
Mapper.AddProfile();

但是我想知道问题出在哪里,我做错了什么。

我不知道如何正确地使用
Mapper.Initialize()
,显而易见的方法是行不通的

这里有一个解决方法:

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

因为在
x
您将获得另一个
IConfiguration

实例,您还应该注册
CsvCategory
@Sirwan:我收到的是AM异常,不是SI。另外,CsvCategory不是由容器构造的,我在映射时有实例。如果调用
container.Options.ResolveUnregisteredCollections=true直接在创建
容器之后
?@Steven:不幸的是没有更改。我怀疑是配置错误。调用CreateMap()后,我注意到内部字典包含一对类型。映射时,此词典为空。这意味着我要处理多个实例。
Mapper.Initialize(x =>
{
    var config = container.GetInstance<IConfiguration>();
    config.ConstructServicesUsing(container.GetInstance);
    config.AddProfile<CsvCategoryMappingProfile>();
});