2015-02-10 41 views
0

如何將攔截器添加到接口註冊中,以便在從已解析實例(IoC.Resolve)調用方法時執行該攔截器,但在使用已實例從我的類/對象的內部注入(作爲構造函數參數)?Castle IoC - 在注入對象時不添加攔截器

在我們的基礎設施中,我們添加了一個攔截器,可以爲每個調用打開/關閉nhibernate會話,但如果在外部和內部會話中查詢同一個實體,注入的代理實例將在會話內部打開會話並導致死鎖。

回答

1

我已經看過這個,我沒有看到任何簡單的方法來改變攔截器的行爲,取決於它被調用的上下文。

你可以做的是創建一個攔截器,該攔截器用一個單身生命週期來封裝一個組件,創建一個單獨的會話並在未關閉時返回相同的會話。嘗試創建第二個會話時,會返回初始會話並遞增sessionCreated計數器。當試圖關閉一個會話時,它減少sessionCreated計數器,並且只有當它是0時才關閉它。