我有一个服务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将Service1
和Service2
的实例作为组件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`
如何获得以service1
和service2
为参数的StrategyService
实例?
只需反转组件的声明,如下所示:
container.Register(
Component.For<IService>().ImplementedBy<StrategyService>(),
Component.For<IService>().Instance(new Service1()).Named("service1"),
Component.For<IService>().Instance(new Service2()).Named("service2"));
这里有一些神奇之处,它似乎解析了声明的第一个组件,但只使用下两个组件,将第一个组件排除在要注入的数组中。