Castle Windsor:SelectHandler 应该只在解析期间调用吗?

Castle Windsor: SelectHandler should be called only during resolving?

我正在使用 Castle Windsor 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 时,它会调用 HasOpinionAboutSelectHandler

问题很简单。 它应该像那样工作吗?

引用自official documentation

Handler selectors let you dynamically choose a component to satisfy the requested service and override Windsor's default behavior. This is particularly useful in multi-tenant applications.

我原以为这些函数应该只在解析期间调用,而不是在注册期间调用。 (他们在解析和注册期间都会被调用。)

他们明确表示它对多租户应用程序很有用,因此在大多数情况下,租户是在解析期间确定的,而不是在注册期间确定的。

我的假设是否正确?

GitHub Issue #461

如果您希望能够为不同的租户拥有不同的组件实例,您需要使用不同的生活方式(不同于默认的 Singleton)。