我有一项需要注入多个提供程序的服务,例如,请参见下文。如何使用 Unity 来实现这个功能?
public class MyService: IMyService
{
public MyService(IEnumerable<Provider> Providers);
}
我有一项需要注入多个提供程序的服务,例如,请参见下文。如何使用 Unity 来实现这个功能?
public class MyService: IMyService
{
public MyService(IEnumerable<Provider> Providers);
}
我知道这是一个老问题,但也许这会帮助其他偶然发现这个问题的人。
只要您使用特定名称注册实现,就可以轻松注入。然后,您将获得所有已注册的实现。
public class MyService: IMyService
{
public MyService(IProvider[] providers)
{
// Do something with the providers
}
}
只要确保将它们作为数组注入即可。Unity 会理解这一点。当您注册它们时,您可以这样注册它们:
container.RegisterType<IProvider, FooProvider>("Foo");
container.RegisterType<IProvider, BarProvider>("Bar");
一种方法是注入 UnityContainer 本身,然后解析您需要的所有 Provider:
public class MyService : IMyService
{
public class MyService(IUnityContainer iocContainer)
{
var providers = iocContainer.ResolveAll<IProvider>();
}
}
您唯一需要做的就是在设置的某处注册 UnityContainer:
unityContainer.Register<IUnityContainer>(unityContainer, new ContainerControllerLifetimeManager());