複数のプロバイダーを注入する必要があるサービスがあります。たとえば、以下を参照してください。Unity を使用してこの機能を実装するにはどうすればよいですか?
public class MyService: IMyService
{
public MyService(IEnumerable<Provider> Providers);
}
複数のプロバイダーを注入する必要があるサービスがあります。たとえば、以下を参照してください。Unity を使用してこの機能を実装するにはどうすればよいですか?
public class MyService: IMyService
{
public MyService(IEnumerable<Provider> Providers);
}
これは古い質問であることは知っていますが、これに遭遇した他の誰かを助けるかもしれません.
実装を特定の名前で登録する限り、これは簡単に注入できます。次に、登録されているすべての実装を取得します。
public class MyService: IMyService
{
public MyService(IProvider[] providers)
{
// Do something with the providers
}
}
それらを配列として注入するようにしてください。Unity はこれを理解します。そして、それらを登録すると、次のように登録できます。
container.RegisterType<IProvider, FooProvider>("Foo");
container.RegisterType<IProvider, BarProvider>("Bar");
1 つの方法は、UnityContainer 自体を注入してから、必要なすべてのプロバイダーを解決することです。
public class MyService : IMyService
{
public class MyService(IUnityContainer iocContainer)
{
var providers = iocContainer.ResolveAll<IProvider>();
}
}
あなたがする必要がある唯一のことは、UnityContainer をセットアップのどこかに登録することです:
unityContainer.Register<IUnityContainer>(unityContainer, new ContainerControllerLifetimeManager());