我遇到了一种情况,我想拦截对 .NET 中属性的调用。我一直在 CaSTLe 中查看 DynamicProxy,它似乎工作正常。但似乎为了使用它,我必须从一个新对象开始,这意味着我不能做这样的事情:
MyType myType = new MyType();
myType.Property = "Test";
...
MyType wrappedMyType = proxyBuilder.Wrap(myType, new MyInterceptor());
wrappedMyType.Property = "Test2";
我是不是错过了什么?
编辑:
天啊,它当然应该被wrappedMyType。大错。对不起。 :(
最佳答案
它不是那样工作的,它不会以任何方式改变原始对象。
这样想吧。让我们考虑搬到中国,为一家中国公司工作,这家公司只会将你的薪水支付到中国银行的中国银行账户中。
所以,你需要有一个中国银行账户。问题是,您想要使用的银行不会说英语,所以您遇到了问题。
如果可以的话,您可以做的是调用代理服务、翻译服务,该服务代表您调用银行。你对这个代理人说的任何话,都会被翻译成中文,并告诉银行官员。他/她用中文回复的任何内容都会被翻译回英文并与您对话。
实际上,您现在可以在与银行交谈时沿着通信线路执行某些操作。
但是,它并不会让您的银行官员说英语。
从您的示例来看,代理对象不会修改底层对象。每当您调用代理对象上的方法时,它们将依次调用底层对象上的方法,并可能一路进行处理。
但是如果您避开代理对象,则什么都不会改变。
关于.net - 包装现有对象以拦截 .NET 中的方法/属性调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1929643/