我正在使用温莎城堡4.1.1。为了简单起见,我创建了演示来说明问题:
这是容器初始化:
using(var container = new WindsorContainer())
{
container.Kernel.AddHandlerSelector(new HandlerSelector());
// Should not call handler selector
container.Register(Component.For<IA>().ImplementedBy<AImpl>());
container.Register(Component.For<IB>().ImplementedBy<BImpl>());
// Should call handler selector
container.Resolve<IA>();
}
AImpl
取决于IB
。 (只需构造函数注入)
当我呼叫container.Register
时,它会呼叫HasOpinionAbout
和SelectHandler
。
问题非常简单。 应该那样工作吗?
这是official documentation的引文:
处理程序选择器使您可以动态选择要满足的组件 请求的服务,并覆盖Windsor的默认行为。这是 在多租户应用中特别有用。
我期望这些功能仅在解析期间才能调用,而不是在注册期间调用。 (它们在解析和注册期间都会被调用。)
他们明确声明它对多租户应用很有用,因此在大多数情况下,租户是在解决过程中确定的,而不是在注册过程中确定的。
我的假设正确吗?
答案 0 :(得分:1)
如果您希望能够为不同的租户使用不同的组件实例,则需要使用不同的生活方式(默认情况下,与Singleton不同)。