我目前正在調試的話題,提高調試__TransparentProxy
例如,從團結的TransparentProxyInterceptor
解決。如何在VisualStudio 2008中調試__transparentProxy實例?
常用的調試情況是,雖然節目是打破,我想看看公衆成員值或致電代理包裹實例的方法在VS2008 IDE或者監視窗口或立即窗口。
這裏談到的問題:當訪問公共財產,呼籲我的代理包裹的實例方法,我總是遇到異常消息,顯示在監視/即時窗口,說
「不能獲取類型爲「MyDomainObject」的實例的字段或調用方法,因爲它是遠程對象的代理。
我已經深入到網絡上的線程,發現這個異常的原因是由於.NET __transparentProxy
的內部反射行爲。 __transparentProxy
實例無法訪問__transparentProxy
實例本身中的RealProxy
實例中的相應屬性/方法。
據我所知,這裏有兩種方式(不包括外部工具,任何設計或協助),以獲得我想要的價值。一種方法是在Watch窗口中繼續展開並展開私有成員的值,並且在幾次點擊之後,我可以最終訪問無代理的原始實例,我可以在其中執行任何我想要的操作。另一種方式要快得多,但每次要訪問原始未加密實例時仍需要一點努力:RemotingServices.GetRealProxy(myProxiedObject).Target
無論哪種方式都是可行的,但需要一些努力來獲得我想要的實例,並且我想要的代理實例居住在深層次結構中,繼續展開或編寫RemotingServices.GetRealProxy(myProxiedObject).Target
(循環)是非常繁瑣的。
我拿出兩種解決方案,一種是試圖從在.NET DebuggerTypeProxyAttribute
一些幫助,但似乎沒有這樣做,因爲我必須追加該屬性的RealProxy
派生類,我真不」不想在Unity中修改InterceptingRealProxy
類的源代碼。
另一種方法似乎是可行的,但我扭一流的設計一點。我添加了一個protected readonly
屬性調用_rawInstance
在我的代理包裹的目標實例的基類,所以我可以看到在我的監視窗口_rawInstance
這直接導致我到我原來的未包裝的對象。該代碼可能是這樣的:
public class MyDomainBase : MarshalByRefObject
{
protected MyDomainBase _rawInstance
{
get{ return this; }
}
(... some members, ignored)
}
我不知道是否有任何更好的解決這個問題?任何信息或提示將非常感激。