簡體   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