温莎城堡:仅在解析期间应调用SelectHandler吗?

时间:2018-12-29 16:14:06

标签: c# inversion-of-control 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的引文:

  

处理程序选择器使您可以动态选择要满足的组件   请求的服务,并覆盖Windsor的默认行为。这是   在多租户应用中特别有用。

我期望这些功能仅在解析期间才能调用,而不是在注册期间调用。 (它们在解析和注册期间都会被调用。)

他们明确声明它对多租户应用很有用,因此在大多数情况下,租户是在解决过程中确定的,而不是在注册过程中确定的。

我的假设正确吗?

GitHub Issue #461

1 个答案:

答案 0 :(得分:1)

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