これはなに?

ASP.Net Coreのサービスコレクション(DIコンテナ)にMVC機能を載せる拡張メソッドはいくつかあります。

  • AddMvcCore
  • AddControllers
  • AddControllersWithView
  • AddMvc

どう違うのかドキュメントがないので、ソースコードから探ってみます。

__2019年4月__時点の情報です。

TL;DR

拡張メソッド 解説
AddMvcCore 必要最小限のものを追加
AddControllers AddMvcCore + いろいろ(後述)
AddControllersWithView AddControllers + AddViews + AddRazorViewEngine
AddMvc 全部入り AddControllersWithView + AddRazorPages

ソースコードのありか

ソースコード自体はこちらにあります。

AddControllersがやっていること

AddMvcCoreに加えて、以下のことをやっています。

AddApiExplorer();
AddAuthorization();
AddCors();
AddDataAnnotations();
AddFormatterMappings();

なんとなく文字面から想像できるでしょうか。

AddAuthorization 認証/認可周りの処理をやってくれそうです。

AddCors クロスオリジンな処理をやってくれそうです。

AddDataAnnotations モデルの検証(バリデーション)周りをやってくれそうです。

AddFormatterMapping URL文字列と、メディアタイプの関連付けをやってくれるようです。

AddApiExplorer、、は謎ですね。

まとめ

なんとなく雑にわかったのでまとめてみます。

  • Razorビューを使うひと → 全部入りAddMvcを使う
  • ビューが不要なひと → AddControllersAddMvcCoreを使う
  • WebAPIのみなひと → AddControllersAddMvcCoreを使う