我正在使用带有内置容器的ASP.NET Core。
自动注册已完成like so:
var config = new MapperConfiguration(c => c.AddProfiles(typeof(Startup)));
services.AddSingleton<IMapper>(s => config.CreateMapper());
这会自动1)配置AutoMapper,2)注册在程序集中找到的所有配置文件。
但我想手动注册我的个人资料。我该怎么做?
答案 0 :(得分:1)
您可以创建一个新的AutoMapper.MapperCOnfiguration,而不是调用AddProfiles,您可以为要注册的每个配置文件使用CreateMap方法。 像这样的东西
var config = new AutoMapper.MapperConfiguration(cfg =>
{
cfg.CreateMap<myObj, myObjDto>();
});
var mapper = config.CreateMapper();
然后注入mapper并完成它。
答案 1 :(得分:1)
只需使用该方法的 sigular 版本即可。
var config = new MapperConfiguration(c => {
c.AddProfile<ProfileA>();
c.AddProfile<ProfileB>();
});
services.AddSingleton<IMapper>(s => config.CreateMapper());
答案 2 :(得分:0)
我将 Autofac 用于我的ASP.NET Core项目-这是我的代码外观:
(下面是Autofac模块的声明)
public class DefaultModule : Module
{
protected override void Load(ContainerBuilder builder)
{
var mapperConfiguration = new MapperConfiguration(cfg => cfg.AddProfile(new AutoMapperProfileConfiguration()));
var mapper = mapperConfiguration.CreateMapper();
builder.Register(c => mapper).As<IMapper>().SingleInstance();
}
}
SingleInstance()
等效于AddSingleton()
。
AutoMapper配置文件:
public class AutoMapperProfileConfiguration : Profile
{
public AutoMapperProfileConfiguration()
{
CreateMap<TeamDto, Team>();
}
}
这是我们注册服务的方式:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterModule<DefaultModule>();
containerBuilder.Populate(services);
var container = containerBuilder.Build();
return new AutofacServiceProvider(container);
}