tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

【C#】AutoMapperのCreateMapが使えない!?


AutoMapper が5.x系から静的メソッドが使えなくなりましたのでその話。CreateMapがエラーになってて「AutoMapper CreateMap 使えない」で検索しても出てこなかったのでここで書こうかと。

AutoMapperとは?

automapper.org
モデルを簡単にマッピング出来るライブラリです。ASP.NET MVCはViewにモデルを渡す必要があるのでかなり重宝します。データ抽出したモデルをビューモデルに追加するときとか便利!

どこが変わったのか

静的メソッドが動的になり、スレッドセーフになったりパフォーマンスが改善されました。5.x系以前の使い方は以下の通り。

using AutoMapper;
// Mapperを作成
Mapper.CreateMap<Model1, Model2>();
Model1 model1 = new Model1 ()
{
  Name = "saito",
  Age = 28
};
// Model1のデータがModel2の型でマッピングされる
var model2 = Mapper.Map<Model2>(model1 );

そして5.x以後の使い方は以下の通り。

// Mapするモデルの設定
var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<Model1, Model2>();
});
// Mapperを作成
var mapper = config.CreateMapper();
// Model1のデータがModel2の型でマッピングされる
var model2 = mapper.Map<Model2>(model);

ラムダでマップするモデルを設定してMapperを作成と以前と比べてコード量が増えましたが、作者は静的メソッドで作成してしまったことについてずっと後悔しており、以下のリンクでその内容について述べてます。
Removing the static API from AutoMapper | Jimmy Bogard's Blog
TOEIC100点も取れない僕が解釈した内容だと
ずっと静的メソッドで作ったことを後悔していて、さらにJeffrey PalermoっていうHeadspring Systems社の最高技術責任者に「静的メソッドじゃだめじゃね?」って言われて直してたら動的で行けそうだったから完全移行するよ!って内容(だと思う)です。

正直スレッド問題とかパフォーマンスの問題は直面することはなさそうだけど、staticでインスタンスが作られるのは怖いよねってことでアップデートするのはおすすめです。