如何将服务的集合注入到实现相同服务的策略中



我有一个服务IService和一个类似的实现StrategyService

interface IService
{
// interface declaration here
}
class StrategyService: IService
{
IService[] services;
StrategyService(params IService[] services)
{
this.services = services;
}
// interface implementation here
}

现在假设我有两个IService的实现:Service1&Service2。我想告诉Castle Windsor将Service1Service2的实例作为组件StrategyService的参数。

这是我的测试:

var container = new WindsorContainer();
container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));
container.Register(
Component.For<IService>().Instance(new Service1()).Named("service1"),
Component.For<IService>().Instance(new Service2()).Named("service2"),
Component.For<IService>().ImplementedBy<StrategyService>());
var service = container.Resolve<IService>();
// `service` is of type `Service1`

如何获得以service1service2为参数的StrategyService实例?

只需反转组件的声明,如下所示:

container.Register(
Component.For<IService>().ImplementedBy<StrategyService>(),
Component.For<IService>().Instance(new Service1()).Named("service1"),
Component.For<IService>().Instance(new Service2()).Named("service2"));

这里有一些神奇之处,它似乎解析了声明的第一个组件,但只使用下两个组件,将第一个组件排除在要注入的数组中。

最新更新