有誰知道用RealProxy
攔截dynamic
方法調用(特別是那些將要調用RuntimeBinderException
的調用)的方法嗎?我希望能夠捕獲異常並在其上實現「方法缺失」,但是在攔截器獲取參數之前它似乎會被拋出。C#4.0中缺少方法的困難:動態還是RealProxy
我的測試只是看起來像:
dynamic hello = MethodMissingInterceptor<DynamicObject>.Create();
Assert.AreEqual("World", hello.World());
凡World
未在DynamicObject
實際執行。攔截器是非常簡單的 - 我希望檢查IMethodReturnMessage.Exception
爲RuntimeBinderException
,並轉發到類似:
public IMessage MethodMissing(IMethodCallMessage call)
{
return new ReturnMessage(call.MethodBase.Name, new object[0], 0, call.LogicalCallContext, call);
}
不幸的是,我在攔截看到一些調用GetType
,而不是不存在的World
方法。
失敗 - 有誰知道是否有DynamicProxy
版本在.NET 4.0上運行愉快,但可能解決了這個問題?
感謝您的出色解釋,克里斯 - 我剛剛開始在您的博客上瀏覽一系列C#'動態'貼子。 :) 出於我的目的,你的第一個解決方案聽起來像應該工作。我只是真的想要爲構建器樣式的對象進行這些調用,並且爲了增加測試API的流暢性,我不需要在任意對象上捕獲它們。 – Thom 2009-06-10 09:03:53