我试图弄清楚如何在Global.asax级别配置新的AutoMapper。
我曾经使用旧的AutoMapper执行以下操作:
在App_Start文件夹中创建一个名为MappingProfile.cs的类,在构造函数中我会添加这样的映射:
public MappingProfile()
{
Mapper.CreateMap<Product, ProductDto>();
Mapper.CreateMap<ApplicationUser, UserDto>();
}
然后在Global.asax调用:
Mapper.Initialize(cfg => cfg.AddProfile<MappingProfile>());
有人可以告诉我如何使用新版AutoMapper实现上述目标吗?我一直在阅读文档,但似乎无法得到它。
我相信我在MappingProfile.cs文件中做了类似的事情:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Product, ProductDto>();
cfg.CreateMap<ApplicationUser, UserDto>();
});
但我怎么处理config变量?
答案 0 :(得分:3)
我就是这样做的。
COPY
然后从任何需要使用它的类继承AutoMapperBase,并像这样调用它:
public abstract class AutoMapperBase
{
protected readonly IMapper _mapper;
protected AutoMapperBase()
{
var config = new MapperConfiguration(x =>
{
x.CreateMap<Product, ProductDto>();
x.CreateMap<ApplicationUser, UserDto>();
});
_mapper = config.CreateMapper();
}
}
您不再需要在Global.asax中声明或配置它
答案 1 :(得分:0)
您需要做的是:
Mapper.Initialize(cfg =>
{
cfg.CreateMissingTypeMaps = true;
cfg.AddProfile<MappingProfile>();
});
这将配置旧AutoMapper中公开的静态映射器实例,以便您可以执行以下操作:
Mapper.Map<SomeType>(fromObject);
如果您不想使用静态实例,那么您需要查看IntoNET答案。
&#34; CreateMissingTypeMaps&#34; line确保在运行中创建丢失的映射&#34;#34;。它相当于旧的:
Mapper.DynamicMap<SomeType>(fromObject)
如果您想手动定义每个映射,可以删除此行。
有一个版本的AutoMapper,作者试图摆脱暴露的静态由于某种原因,但他在公众的强烈抗议后把它带回了我的理解。所以现在你可以用任何你认为合适的方式做到这一点。你可以在这里阅读: