.net - 包装现有对象以拦截 .NET 中的方法/属性调用

标签 .net castle-dynamicproxy

我遇到了一种情况,我想拦截对 .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/

相关文章:

c# - 从 SqlDataReader 检索 INSERT 语句的基础异常

c# - 使用 Linq to SQL 将 C# 对象与 Varbinary 相互转换

c# - 使用托管代码包装器从 64 位托管代码调用 32 位非托管代码的最佳方式

c# - 创建同时实现多个接口(interface)的动态代理

c# - 动态转换为通用类型

c# - 如何从 header 中检索基本身份验证凭据?

c# - 使用 .NET Rx 观察随 Action 事件改变的属性

caSTLe-windsor - Windsor容器中的CaSTLe动态代理

.net - 哪个 `[InternalsVisibleTo]` 用于 .NET Framework 和 .NET Standard/Core 框架程序集?