如何在ASP.NET Core中手动注册AutoMapper配置文件?

时间:2017-02-17 11:48:07

标签: c# asp.net-core automapper

我正在使用带有内置容器的ASP.NET Core。

自动注册已完成like so

var config = new MapperConfiguration(c => c.AddProfiles(typeof(Startup)));
services.AddSingleton<IMapper>(s => config.CreateMapper());

这会自动1)配置AutoMapper,2)注册在程序集中找到的所有配置文件。

但我想手动注册我的个人资料。我该怎么做?

3 个答案:

答案 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);
}