我有一个需要注入多个提供商的服务,例如见下文。如何使用Unity实现此功能?
public class MyService: IMyService
{
public MyService(IEnumerable<Provider> Providers);
}
答案 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());