ASP.NET Core 依存性の注入 (DI):同一インタフェース複数実装サービスの解決方法
依存性の注入 (Dependency Injection) で同一インタフェースで複数実装サービスの解決方法を紹介します。
2 min readAug 30, 2018
これまでASP.NET MVC/Web APIプロジェクトをゼロから作る案件があった場合、必ず最初に入れるのはIoCコンテナでしたが、ASP.NET CoreはデフォルトでIoCコンテナをサポートされていますので、IoCコンテナを入れる作業が任意になりました。もちろん用途によりAutofacやSimple Injector等、好みのIoCコンテナに変更することも可能です。
本投稿では一つのインタフェースで複数実装するサービス(クラス)がある場合、どういった解決方法があるのかをいくつか紹介したいと思います。
サンプルとしてインタフェースとその実装するサービスは下記を使用します。
サービスの解決方法を見ていきましょう。
■パターン①
IServiceProvider
を使用します。
■パターン②
IEnumerable<T>
を使用します。
■パターン③
ファクトリーパターンを使用します。
■パターン④
Func<string, T>
を使用します。
Startup
クラスの ConfigureServices
にはこんな感じで登録します。
■パターン⑤
正式名称わかりませんが、中間インタフェースを使用します。
■パターン⑥
IPoopService<out T>
パターンを使用します。
このようにいくつかパターンがありますので、必要な時に是非思い出して活用してみてください。