我有一个需要注入多个提供程序的服务,请参阅下面的示例。如何使用Unity来实现此功能?如何使用Microsoft Unity IOC容器注入IEnumerable
public class MyService: IMyService
{
public MyService(IEnumerable<Provider> Providers);
}
我有一个需要注入多个提供程序的服务,请参阅下面的示例。如何使用Unity来实现此功能?如何使用Microsoft Unity IOC容器注入IEnumerable
public class MyService: IMyService
{
public MyService(IEnumerable<Provider> Providers);
}
一种方法是注入UnityContainer本身,然后解决所有您需要的供应商:
public class MyService : IMyService
{
public class MyService(IUnityContainer iocContainer)
{
var providers = iocContainer.ResolveAll<IProvider>();
}
}
你需要做的唯一一件事就是带着本身设置的地方注册UnityContainer:
unityContainer.Register<IUnityContainer>(unityContainer, new ContainerControllerLifetimeManager());
我知道这是一个老问题,但也许这会帮助其他人发现这一点。
只要您使用特定名称注册实现,就可以轻松注入。您将获得所有注册的实现。
public class MyService: IMyService
{
public MyService(IProvider[] providers)
{
// Do something with the providers
}
}
只要确保将它们注入为一个数组。 Unity会理解这一点。而当你注册他们时,你可以这样注册他们:
container.RegisterType<IProvider, FooProvider>("Foo");
container.RegisterType<IProvider, BarProvider>("Bar");
谢谢。我知道这种方式,但我不喜欢它,因为我需要再写一个代码:) – 2013-03-21 00:39:57
请不要与外部类共享容器对象。只有一个班级应该知道ioc容器! @TonyWoo:使用container.RegisterType,Provider []>(); –
bitsmuggler
2013-08-08 12:07:47
在某些情况下,您无法绕过它。我会建议发布该评论作为答案。 – RoelF 2013-08-08 14:42:58