繁体   English   中英

在没有Static API的应用程序启动时配置AutoMapper v4.2

[英]Configuring AutoMapper v4.2 on application start without the Static API

我正在尝试从旧的静态AutoMapper API迁移到根据此资源执行的新方法。

但是,我对如何在Startup.cs / Global.asax等文件中配置AutoMapper感到困惑。

做这样的事情的旧方法是:

Mapper.Initialize(cfg => {
  cfg.CreateMap<Source, Dest>();
});

然后在整个代码中的任何地方,我可以简单地做:

var dest = Mapper.Map<Source, Dest>(source);

现在使用新版本似乎无法在Application Start上初始化AutoMapper,然后在Controller中使用它。 我弄清楚如何做到这一点的唯一方法是在控制器中执行所有操作:

var config = new MapperConfiguration(cfg => {
  cfg.CreateMap<Source, Dest>();
});

IMapper mapper = config.CreateMapper();
var source = new Source();
var dest = mapper.Map<Source, Dest>(source);

我现在在MVC控制器或我的应用程序中的任何其他地方使用它时,是否真的必须配置AutoMapper? 是的,文档向您展示了如何以新的方式配置它,但它们只是将其设置为一个名为config的变量,它无法在我的整个应用程序中运行。

我找到了关于保持静态感觉的文档 但是我对MyApplication.Mapper是什么以及我应该在哪里声明它感到有点困惑。 它似乎是一个全局应用程序属性。

你可以这样做。
1.)创建一个具有MapperConfiguration类型属性的静态类

public static class AutoMapperConfig
{
    public static MapperConfiguration MapperConfiguration;

    public static void RegisterMappings()
    {
        MapperConfiguration = new MapperConfiguration(cfg => {
            cfg.CreateMap<Source, Dest>().ReverseMap();
        });
    }
}

2.)在Global.asax的Application_Start中,调用RegisterMapping方法

AutoMapperConfig.RegisterMappings();

3.)在控制器中,创建映射器。

IMapper Mapper = AutoMapperConfig.MapperConfiguration.CreateMapper();
Mapper.Map<Dest>(source);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM