[ASP.NET Core MVC] サービスコレクション(DIコンテナ)の構成方法 AddMvc/AddMvcCore/AddController/AddControllersWithView の違い
これはなに?
ASP.Net Coreのサービスコレクション(DIコンテナ)にMVC機能を載せる拡張メソッドはいくつかあります。
AddMvcCoreAddControllersAddControllersWithViewAddMvc
どう違うのかドキュメントがないので、ソースコードから探ってみます。
__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を使う - ビューが不要なひと →
AddControllersかAddMvcCoreを使う - WebAPIのみなひと →
AddControllersかAddMvcCoreを使う