如何使用Microsoft Unity IOC容器注入IEnumerable

时间:2013-03-20 08:09:30

标签: inversion-of-control unity-container

我有一个需要注入多个提供商的服务,例如见下文。如何使用Unity实现此功能?

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

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:-3)

一种方法是注入UnityContainer本身,然后解析所需的所有提供者:

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

您唯一需要做的就是在设置的某处注册UnityContainer:

unityContainer.Register<IUnityContainer>(unityContainer, new ContainerControllerLifetimeManager());