3

複数のプロバイダーを注入する必要があるサービスがあります。たとえば、以下を参照してください。Unity を使用してこの機能を実装するにはどうすればよいですか?

public class MyService: IMyService
{
    public MyService(IEnumerable<Provider> Providers);
}
4

2 に答える 2

1

これは古い質問であることは知っていますが、これに遭遇した他の誰かを助けるかもしれません.

実装を特定の名前で登録する限り、これは簡単に注入できます。次に、登録されているすべての実装を取得します。

public class MyService: IMyService
{
    public MyService(IProvider[] providers)
    {
       // Do something with the providers
    }
}

それらを配列として注入するようにしてください。Unity はこれを理解します。そして、それらを登録すると、次のように登録できます。

container.RegisterType<IProvider, FooProvider>("Foo");
container.RegisterType<IProvider, BarProvider>("Bar");
于 2016-01-13T09:15:22.740 に答える
-3

1 つの方法は、UnityContainer 自体を注入してから、必要なすべてのプロバイダーを解決することです。

public class MyService : IMyService 
{
    public class MyService(IUnityContainer iocContainer)
    {
        var providers = iocContainer.ResolveAll<IProvider>();
    }
}

あなたがする必要がある唯一のことは、UnityContainer をセットアップのどこかに登録することです:

unityContainer.Register<IUnityContainer>(unityContainer, new ContainerControllerLifetimeManager());
于 2013-03-20T09:57:21.007 に答える