Edited at

Automapperの定義の書き方

More than 3 years have passed since last update.

AutomapperのMapperという静的クラスの扱いが5.x系から変更になったようなのでメモ


これまで.cs

Mapper.CreateMap<Model, ViewMoedl>();

var klassModel = new KlassModel();
var vm = Mapper.Map<KlassViewModel>(klassModel);

と Automapper の 4.x系で書くと

Dynamically creating maps will be removed in version 5.0. 

Use a MapperConfiguration instance and store statically as needed,
or Mapper.Initialize. Use CreateMapper to create a mapper instance.

という警告が出力されていた。

Mapper.Createが使えなくなる??とビビっていた時期が私にもありました。

静的なクラス自体は残っていて、文法が変わった模様。

※恐らく本当は都度インスタンス化するのがパフォーマンス的におすすめだと思われる。


これから1.cs

Mapper.Initialize(cfg =>

{
cfg.CreateMap<Model, ViewMoedl>();
});

の書き方で、global.asaxのApplication_Startとかに定義を記述

使うときは今まで通りのこんな感じ


これから1を使う.cs

var klassModel = new KlassModel();

var vm = Mapper.Map<KlassViewModel>(klassModel);

都度定義を書いてやるとか、どっかのメソッドにまとめとくぜって人は


これから2.cs

var config = new MapperConfiguration(cfg =>

{
cfg.CreateMap<KlassModel,KlassViewModel>();
});
var mapper = config.CreateMapper();
var klassModel = new KlassModel();
var vm = mapper.Map<KlassViewModel>(klassModel);

みたいな感じでかけば良いと思います。

GithubのWikiにいっぱい情報ありますね。

何はともあれ、書き換えは最小限で済みそうです。

現場からは以上です