2013-03-20 40 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"); 
相關問題