2013-03-20 70 views

回答

-2

一种方法是注入UnityContainer本身,然后解决所有您需要的供应商:

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

你需要做的唯一一件事就是带着本身设置的地方注册UnityContainer:

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

谢谢。我知道这种方式,但我不喜欢它,因为我需要再写一个代码:) – 2013-03-21 00:39:57

+2

请不要与外部类共享容器对象。只有一个班级应该知道ioc容器! @TonyWoo:使用container.RegisterType ,Provider []>(); – bitsmuggler 2013-08-08 12:07:47

+0

在某些情况下,您无法绕过它。我会建议发布该评论作为答案。 – RoelF 2013-08-08 14:42:58

0

我知道这是一个老问题,但也许这会帮助其他人发现这一点。

只要您使用特定名称注册实现,就可以轻松注入。您将获得所有注册的实现。

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

只要确保将它们注入为一个数组。 Unity会理解这一点。而当你注册他们时,你可以这样注册他们:

container.RegisterType<IProvider, FooProvider>("Foo"); 
container.RegisterType<IProvider, BarProvider>("Bar");