2015-02-10 63 views
0

如何将拦截器添加到接口注册中,以便在从已解析实例(IoC.Resolve)调用方法时执行该拦截器,但在使用已实例从我的类/对象的内部注入(作为构造函数参数)?Castle IoC - 在注入对象时不添加拦截器

在我们的基础设施中,我们添加了一个拦截器,可以为每个调用打开/关闭nhibernate会话,但如果在外部和内部会话中查询同一个实体,注入的代理实例将在会话内部打开会话并导致死锁。

回答

1

我已经看过这个,我没有看到任何简单的方法来改变拦截器的行为,取决于它被调用的上下文。

你可以做的是创建一个拦截器,该拦截器用一个单身生命周期来封装一个组件,创建一个单独的会话并在未关闭时返回相同的会话。尝试创建第二个会话时,会返回初始会话并递增sessionCreated计数器。当试图关闭一个会话时,它减少sessionCreated计数器,并且只有当它是0时才关闭它。