例如,我有两个接口:ICustomerService 和 IOrderService,每个接口都有几个函数,如 GetCustomer、GetOrder 等。
我想要一个类来实现这两个接口:服务器。
温莎城堡对此有何回应?一开始有可能吗?当我基于两个接口之一解析服务器对象时,我会得到相同的对象吗?当我有一个在其参数中具有两个接口的构造函数时会发生什么?是否仍会构造一个对象。
假设 LifeStyle 保留其默认值:Singleton。
例如,我有两个接口:ICustomerService 和 IOrderService,每个接口都有几个函数,如 GetCustomer、GetOrder 等。
我想要一个类来实现这两个接口:服务器。
温莎城堡对此有何回应?一开始有可能吗?当我基于两个接口之一解析服务器对象时,我会得到相同的对象吗?当我有一个在其参数中具有两个接口的构造函数时会发生什么?是否仍会构造一个对象。
假设 LifeStyle 保留其默认值:Singleton。
CLR 类型和 Windsor 服务或组件之间没有硬性的一对一映射(如果需要的话,这里有词汇表)。
所以你可以有以下任何一种情况:
许多具有不同实现类型的组件公开一个服务
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>()
);
正如您所看到的,是的 - 这是可能的,您是否会获得相同的实例(假设为单例)取决于您选择的选项 - 两个服务是否将由同一个组件公开。