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

一种方法是注入 UnityContainer 本身,然后解析您需要的所有 Provider:

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 回答