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
时,它会调用 HasOpinionAbout
和 SelectHandler
。
问题很简单。 它应该像那样工作吗?
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.
我原以为这些函数应该只在解析期间调用,而不是在注册期间调用。 (他们在解析和注册期间都会被调用。)
他们明确表示它对多租户应用程序很有用,因此在大多数情况下,租户是在解析期间确定的,而不是在注册期间确定的。
我的假设是否正确?
如果您希望能够为不同的租户拥有不同的组件实例,您需要使用不同的生活方式(不同于默认的 Singleton)。
我正在使用 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
时,它会调用 HasOpinionAbout
和 SelectHandler
。
问题很简单。 它应该像那样工作吗?
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.
我原以为这些函数应该只在解析期间调用,而不是在注册期间调用。 (他们在解析和注册期间都会被调用。)
他们明确表示它对多租户应用程序很有用,因此在大多数情况下,租户是在解析期间确定的,而不是在注册期间确定的。
我的假设是否正确?
如果您希望能够为不同的租户拥有不同的组件实例,您需要使用不同的生活方式(不同于默认的 Singleton)。