やり方はいろいろあるかもしれませんが、個人的に一番簡単だと思った方法です。
環境
- Visual Studio 2017
- .NET Core 2.2
実体を区別しない場合
以下の過去記事を参考にしてください。
今回は DI した側で実体を区別したい場合です。
サンプル
例えば、以下のような IFoo
を実装した複数のクラスがあったとします。
public class ServiceA : IFoo {}
public class ServiceB : IFoo {}
public class ServiceC : IFoo {}
これを、全て IFoo
として登録しつつ、区別できるようにキーを付与します。
つまり、Dictionary
として登録します。
services.AddSingleton<IDictionary<string, IFoo>>(new Dictionary<string, IFoo>()
{
[nameof(ServiceA)] = new ServiceA (),
[nameof(ServiceB)] = new ServiceB (),
[nameof(ServiceC)] = new ServiceC (),
});
DI される側では以下のようにして使います。
public Sample(IDictionary<string, IFoo> services)
{
var service = services[nameof(ServiceA)];
}