2010-08-26 82 views
4

我正在使用Microsoft Unity 2.0,並且攔截擴展未按預期工作。Microsoft Unity:使用BuildUp代替Resolve時攔截不起作用

考慮的這兩行代碼:

MyUnityContainer.Configure<Interception>().SetDefaultInterceptorFor<MyType>(new VirtualMethodInterceptor()); 
var someObject = MyUnityContainer.BuildUp<MyType>(anObject); 

這兩條線沒有得到你你所期望的someObject動態代理!如何爲這種情況製作截取工作?

+0

同樣的問題適用於統一1.2 – Falcon 2010-08-26 12:10:33

回答

4

This page解釋說,當在創建對象(由於目標對象的子類是動態生成的),則可以不使用BuildUp使用虛擬攔截,因爲它只能應用於:

截取僅發生在虛擬 方法。您必須在對象創建時設置攔截 ,並且不能 攔截現有對象。

+0

有沒有什麼辦法來攔截現有的物質而不使它們可複製?也許是一個自定義對象創建器? – Falcon 2010-08-26 12:32:07

0

VirtualMethodInterceptor僅適用於新對象。您可以使用Interface或TransparentProxy攔截器來攔截現有實例(因爲這些實例使用顯式代理對象)。

我可以看到可能會添加一個VirtualMethodProxyInterceptor,但我認爲它會造成比幫助更多的困惑。