在一个项目中,我使用 Castle Dynamic Proxy 将所有由外观运行的代码包装在 try/catch 块中(听起来很奇怪?在此处解释)。这很好,但是为了确保所有方法调用都被拦截,当我遇到非虚拟的东西时,我会抛出一个异常,使用接口的NonProxyableMemberNotification
方法IProxyGenerationHook
:
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));
}
根据 Krzysztof Koźmic 的精彩教程;对象类是特殊情况,默认情况下 DynamicProxy 将忽略它们。问题是,就我而言,它们没有被忽略,从以下示例MemberInfo
数据中可以看出:
我在这里错过了什么吗?NonProxyableMemberNotification
应该在 Object 方法上触发吗?
我正在使用 .Net 3.5、VS2010 和 Castle Core 版本 2.5.2,并且我没有Object.GetType()
在我的XmlDocumentBackend
.