依存性の注入 (Dependency Injection) で同一インタフェースで複数実装サービスの解決方法を紹介します。
これまで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> パターンを使用します。
このようにいくつかパターンがありますので、必要な時に是非思い出して活用してみてください。
Top comments (0)