例如,我有两个接口:ICustomerService和IOrderService,每个接口都有一些函数,如GetCustomer,GetOrder等。
我希望一个类实现两个接口:Server。
Castle Windsor如何应对此问题? 有可能首先吗? 当我基于两个接口之一解析Server对象时,我会获得相同的对象吗? 当我的构造函数在其参数中包含两个接口时会发生什么?是否还会构建一个对象。
假设LifeStyle保持默认值:Singleton。
答案 0 :(得分:4)
CLR类型与Windsor服务或组件(glossary if needed is here)之间没有硬性的一对一映射。
所以你可以有以下任何一种情况:
许多具有不同实现类型的组件都会公开单个服务
container.Register(
Component.For<IFoo>().ImplementedBy<Foo1>(),
Component.For<IFoo>().ImplementedBy<Foo2>()
);
许多具有相同实现类型的组件都会公开单个服务
container.Register(
Component.For<IFoo>().ImplementedBy<Foo1>(),
Component.For<IFoo>().ImplementedBy<Foo1>().Named("second")
);
许多具有相同实现类型的组件会公开不同的服务
container.Register(
Component.For<IFoo>().ImplementedBy<Foo1>(),
Component.For<IBar>().ImplementedBy<Foo1>().Named("second")
);
单个组件公开不同的服务
container.Register(
Component.For<IFoo, Bar>().ImplementedBy<Foo1>()
);
正如您所看到的,是的 - 这是可能的,并且您是否会获得相同的实例(假设是单例)取决于您选择的选项 - 如果两个服务都将由相同的组件公开。
答案 1 :(得分:3)