DEV Community

Joni 【ジョニー】
Joni 【ジョニー】

Posted on • Originally published at Medium on

ASP.NET Core 依存性の注入 (DI):同一インタフェース複数実装サービスの解決方法

依存性の注入 (Dependency Injection) で同一インタフェースで複数実装サービスの解決方法を紹介します。

一つのインタフェースで複数実装するサービス例

これまでASP.NET MVC/Web APIプロジェクトをゼロから作る案件があった場合、必ず最初に入れるのはIoCコンテナでしたが、ASP.NET CoreはデフォルトでIoCコンテナをサポートされていますので、IoCコンテナを入れる作業が任意になりました。もちろん用途によりAutofacSimple Injector等、好みのIoCコンテナに変更することも可能です。

本投稿では一つのインタフェースで複数実装するサービス(クラス)がある場合、どういった解決方法があるのかをいくつか紹介したいと思います。

サンプルとしてインタフェースとその実装するサービスは下記を使用します。

サービスの解決方法を見ていきましょう。

■パターン①

IServiceProvider を使用します。

■パターン②

IEnumerable<T> を使用します。

■パターン③

ファクトリーパターンを使用します。

■パターン④

Func<string, T> を使用します。

Startup クラスの ConfigureServices にはこんな感じで登録します。

■パターン⑤

正式名称わかりませんが、中間インタフェースを使用します。

■パターン⑥

IPoopService<out T> パターンを使用します。

このようにいくつかパターンがありますので、必要な時に是非思い出して活用してみてください。

Top comments (0)