在一個項目中,我使用Castle動態代理將try/catch塊中的所有由façade運行的代碼包裝起來(聽起來很奇怪嗎?解釋here)。這工作正常,但要確保所有的方法調用被攔截,我拋出一個異常,當我遇到一些非虛,使用IProxyGenerationHook
接口的NonProxyableMemberNotification
方法:城堡動態代理想攔截Object.GetType()
public void NonProxyableMemberNotification(Type type, MemberInfo memberInfo)
{
throw new InvalidOperationException(string.Format(
"Proxy failure. {0} {1} in {2} is not virtual.",
memberInfo.MemberType, memberInfo.Name, memberInfo.DeclaringType));
}
據剋日什托夫·Koźmic的偉大tutorial; 對象類是特殊情況,DynamicProxy默認會忽略它們。問題是,在我的情況下,他們不會被忽略,從下面的示例MemberInfo
數據看出:
有什麼我已經在這裏錯過了嗎?是NonProxyableMemberNotification
應該在Object方法上觸發?
我使用的是.Net 3.5,VS2010和Castle Core 2.5.2版本,並且我不是在覆蓋Object.GetType()
我的XmlDocumentBackend
。
感謝您的答案,這真的解釋了很多! – joneberg