Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何运行代理POCOs?_.net_Proxy_Poco - Fatal编程技术网

.net 如何运行代理POCOs?

.net 如何运行代理POCOs?,.net,proxy,poco,.net,Proxy,Poco,我希望能够为POCO创建一个运行时代理,其风格与我在Java中使用或代理库时的风格相同 我已经看到了它看起来很合适,但是文档不是很好。我还感到惊讶的是,这种东西不在.Net框架中 是否有人: 你知道有什么好的资源给Castle DynamicProxy吗 知道其他的方法吗 谢谢 这可能不值得回答,但您在.NET中看不到动态代理激增的原因之一是,大多数常见的.NET语言(C#,VB.NET)与Java在一个非常重要的方面有所不同: 在Java中,除非显式声明密封,否则所有方法都是虚拟的 在C#

我希望能够为POCO创建一个运行时代理,其风格与我在Java中使用或代理库时的风格相同

我已经看到了它看起来很合适,但是文档不是很好。我还感到惊讶的是,这种东西不在.Net框架中

是否有人:

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

谢谢

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

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

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

这意味着.NET中动态代理的潜在价值远低于Java。您必须显式地将.NET对象设计为“可代理”,而大多数人不会这样做-使.NET对象“可代理”需要有意识的决定

事实上,在DI容器之外看到.NET动态代理是如此罕见,以至于我想不出除了Castle之外还有其他动态代理

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

“我也很惊讶.Net Framework本身没有这种东西。”

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

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