我有一個需要注入多個提供程序的服務,請參閱下面的示例。如何使用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