【发布时间】:2014-06-06 15:26:23
【问题描述】:
我想创建一个执行以下操作的方法:
- 将任意实例作为参数
- 生成一个包装器实例,以与传递的实例相同的方式提供所有属性和方法
- 用不同的实现覆盖一个方法
- 返回生成的实例
这与 ORM 创建的代理对象非常相似。它们通常不返回真实的模型类,而是行为相同的代理对象,除了延迟加载等。
那里有合适的东西吗? (我看到了 CodeDom,但也看到了我需要为方法实现发出的操作码......)
【问题讨论】:
-
CodeDom 不使用操作码;那是
Reflection.Emit。 -
@Jeroen:杰普,你是对的。应该阅读:'看到 CodeMethodInvokeExpression 的过于简单的示例,以及 Emit 的 OpCodes' ;-)
-
如果实例是公共类的实例并且方法是虚拟的,您可以为此使用 RhinoMocks - 为什么要重新发明轮子?
-
@BenAaronson:您的链接似乎匹配,并且解决方案看起来真的像我预期的那样。但是,从 MarshalByRefObject 派生我的类会在其他位置产生问题。
标签: c# proxy-object