【发布时间】:2009-06-07 10:38:40
【问题描述】:
有人知道用RealProxy 拦截dynamic 方法调用(尤其是那些将引发RuntimeBinderExceptions 的方法调用)的方法吗?我希望捕获异常并在此基础上实现“缺少方法”,但它似乎在拦截器查看之前被抛出。
我的测试看起来像:
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# dynamic proxy c#-4.0 method-missing