代码之家  ›  专栏  ›  技术社区  ›  Dan Vinton

如何运行代理POCOs?

  •  3
  • Dan Vinton  · 技术社区  · 16 年前

    我希望能够为POCO创建一个运行时代理,与使用 JRE cglib

    我见过 Castle DynamicProxy 这看起来很合适,但是文档不是很好。我还感到惊讶的是,这种东西不在.Net框架中。

    是否有人:

    • 你知道有什么好的资源给Castle DynamicProxy吗?
    • 知道其他的方法吗?

    谢谢

    2 回复  |  直到 16 年前
        1
  •  2
  •   Mark Seemann    16 年前

    这可能不值得回答,但您没有看到.NET中动态代理激增的原因之一是,大多数常见的.NET语言(C#,VB.NET)与Java在一个非常重要的方面不同:

    在Java中,除非显式声明密封,否则所有方法都是虚拟的。

    在C#(和VB.NET IIRC)中,除非显式声明为虚拟,否则所有方法和属性都是密封的。

    请注意,“默认密封”行为是.NET的一项功能 语言 -很有可能,我们可以设计一种基于.NET的语言,它具有与Java相同的“默认虚拟”行为。虽然我什么都不知道,但如果没有这样一种语言,我会感到惊讶。毕竟,这一切都在编译器中。

        2
  •  1
  •   user411061    15 年前

    “我还感到惊讶的是,.Net框架本身没有这种功能。”

    有。虽然不完整、不优雅或不完美。 您可以使用创建从RealProxy继承的通用代理,并可能接收要代理的对象。要获取代理,您需要从realproxy获取一个transparentproxy,并将其转换为您的wrapee(这是一个单词吗?)类型。现在你有了一个代理。代理上的所有方法都可以在RealProxy中的重写调用(IMessage msg)中处理。将它们按原样传递给您的真实对象(wrapee),或者在它们之间执行任何其他操作。

    Cavets:要代理的对象必须从MarshalByRef继承。它相当慢。我不会将其用于常用功能。这就是这里所有的远程处理基础设施。在大多数情况下,ILgen是更好的方法,但在某些情况下,我不得不使用上述方法。

    推荐文章