问题标签 [dynamic-proxy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 是否可以使用 Spring.Net 代理 COM 接口?
我正在尝试使用 Spring.NET 和 C# 为 COM 接口创建一个动态代理。我目前正在尝试使用代码,而不是配置文件。我有类似于以下的代码:
它在 GetProxy() 调用时爆炸,但有以下例外:
这根本不可能吗?我仍在使用 Spring.NET 1.1,这在较新的版本中是否可行(我们最终将很快转向)?
更新:经过试验,我在代理 Form 类时也遇到了同样的错误,但参数略有不同(即 UnmanagedType 44)。
java - 如何在 Java 中创建接口的代理?
如何在不创建实现它的类的情况下为接口创建代理?
我有一个具体的例子:我有一个接口,Contact,需要创建一个代理对象来充当联系人。这个代理对象将用于运行一些 TestNG 测试。
我曾尝试使用 JDK 方法,但只能找到需要实际实现该接口的示例。
我还发现 jasssist 可以帮助我解决这个问题,并尝试实现一个简单的示例,该示例似乎可以正常工作,直到出现内存不足错误。这是我正在做的一个片段:
请记住,createMock() 方法的参数将是一个接口。
谢谢
c# - 生成接口代理
在课堂上遇到问题;我有一个看起来像这样的课程:
自定义视图继承自基本 IView 实例。我遇到了一种情况,我需要动态创建一个自定义类来实现 IMyView 或 ISomeView(取决于某些场景)并访问模型,我想我可以使用像 Castle DynamicProxy 这样的工具来完成它。但我不太确定从哪里开始,我需要能够动态创建自定义 IMyView 或其他类实例。
谢谢。
java - 代理模式与覆盖
假设有一个接口Subject。
我们有一个 RealSubject 类。假设我们想要增强 RealSubject,我们可以使用包裹 RealSubject 的代理模式:
或者我们可以扩展 RealSubject 并覆盖该方法
哪种方法更好?我知道 Liskov 原则;假设 EnhancedSubject 满足 Liskov 原则。你还考虑继承吗?
如果没有接口Subject(即RealSubject 没有实现任何接口),似乎“继承和覆盖”是唯一的选择,因为在代理模式中没有要实现的接口。如果没有 Subject 接口,你还能应用代理模式吗?
java - 如何拥有具有 2 个接口的 Spring 动态代理?
我有一个由 Spring 注入到我的类中的对象(如果你关心的话,是JdbcCursorItemReader )。
它实现了 5 个接口,其中两个我关心(ItemReader,ItemStream)。如果我将我的类编码为一个或另一个,spring 动态代理会被正确注入,我可以在它上面调用方法
酷,按预期工作。如果我想基于 ItemStream 接口做一些事情,我也可以将它转换为 ItemStream:
很酷,这让我可以访问这两个类的方法。但是,我不喜欢选角,并且知道哪里有更好的 Spring Magic 方法来做到这一点。我想到的方法是制作一个结合了两者的接口:
这让我的代码可以同时使用这两者……但代理注入可以预见地失败了。
无法转换类型 [$Proxy0 实现 org.springframework.beans.factory.InitializingBean,org.springframework.batch.item.ItemReader,org.springframework.batch.item.ItemStream,org.springframework.aop.scope.ScopedObject 的属性值,org.springframework.aop.framework.AopInfrastructureBean,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] 为属性“itemReader”所需的类型 [blah.IStreamingItemReader];嵌套异常是 java.lang.IllegalArgumentException:无法转换类型的值 [$Proxy0 实现 org.springframework.beans.factory.InitializingBean,org.springframework.batch.item.ItemReader,org.springframework.batch.item.ItemStream,org. springframework.aop.scope.ScopedObject,org.springframework.aop.framework.AopInfrastructureBean,org.springframework.aop.SpringProxy,org.
引起我注意的部分是 找不到匹配的编辑器或转换策略
有没有办法在看到JdbcCursorItemReader时教 Spring来制作 IStreamingItemReader 的代理?
我意识到我可以用 CGLib 和基于类的代理来解决这个问题......但如果我能把它作为一个动态接口代理,我会更开心......
java - 如何从动态代理中解开原始对象
展开动态代理以检索下面的原始对象的最佳方法是什么?已使用创建动态代理java.lang.reflect.Proxy.newProxyInstance()
谢谢你。
java - 为什么 JDK 动态代理只适用于接口?
JDK Proxy 类只接受工厂方法 newProxyInstance() 中的接口。
是否有可用的解决方法或替代实现?如果我必须将方法提取到接口以使它们能够与代理一起使用,则用例是有限的。我想包装它们以在运行时应用基于注释的操作。
c# - 如何通过网络对具有固定大小批次的 .NET IEnumerable 进行代理远程处理?
.NET 远程处理可以为具有可序列化成员的接口生成透明代理远程,例如:
我想为任何IEnumerator<T>
返回结果提供自定义序列化程序和活动代理远程。我的自定义代理远程器将通过网络一次处理特定数量的元素。例如,给定以下接口:
我想提供一个自定义序列化程序和代理,它会在IEnumerator<T> where T:ISerializable
出现在远程界面中的任何时候自动使用,并且会序列化IEnumerator<string>
到一个客户端,该客户端EnumeratorBatchHandlerClient<string>
具有一个连接到服务器端的 .NET 远程代理EnumeratorBatchHandlerServer<string>
。
我认为客户端批处理程序看起来像这样:
当 IEnumerable 出现在代理界面中时,有没有办法让 .NET Remoting 透明地生成和链接我的自定义客户端/服务器“ienumerable 批处理代理”?
更新:我这样做的一个狡猾的想法是建立一个RealProxy
可以插入存根的工作,并将其粘贴在我的远程班级前面。我想如果我使客户端处理程序可序列化和服务器处理程序 marshalbyref 它会将客户端处理程序发送到 cilent 端并让它与服务器处理程序远程对话。我构建了这样一个 RealProxy,它会忠实地实例化我的EnumeratorClientBatchHandler<>
,并且EnumeratorServerBatchHandler<>
任何时候它看到一个IEnumerator
. 但是,我不能RealProxy
使用 .NET 远程处理“远程”,因为它不能同时是MarshalByRefObject
and的子类RealProxy
。
我看到的唯一前进道路是构建我自己的远程处理系统,它不需要接口实现成为 MarshalByRefObject 的子类来代理远程它们。我看不出这是不可能的任何原因,因为看起来 RealProxy 可以代理任何接口类型。(只有 .NET 远程处理检查基础类型是 MarshalByRefObject)。作为附带的好处,我认为拥有一个使用新的 C# 5.0 异步系统来允许异步处理程序为“标准”接口提供服务的远程处理系统会很好。
下面的这个 Q/A 似乎是半相关的,并讨论了将自定义序列化程序 (protobuf) 与 WCF 一起使用。但是,这与我在某些方面寻找的不同。(1)它仍然将所有数据序列化为二进制流,没有像上面我需要的“正在进行的代理通道”来继续通过远程通道发出代理批处理调用,(2)翻译返回结果的手动 WCF 模式到 EndpointAddress10 似乎与上述模式不兼容。
当然我知道我可以制作一个远程接口,它是批处理接口,然后让客户端手动处理批处理......或者让他们手动将批处理接口包装在他们自己的 EnumerableBatchHandlerClient 实例中。我试图弄清楚如何以透明的方式做到这一点,因为我将有许多通过特定系统出售的接口,IEnumerables 将非常常见,我希望远程处理是“自动的”任何看起来像基本数据类型调用或 IEnumerable(具有批处理支持)的东西。
c# - 在 C# 中实现动态代理的最佳方法是什么?
我需要在 C# 中创建一个动态代理。我希望这个类包装另一个类,并采用它的公共接口,转发对这些函数的调用:
这是我想使用它的方式:
生产:
有任何想法吗?
最简单的方法是什么?
最好的方法是什么?
非常感谢。
更新
我尝试遵循 Wernight 的建议并使用 C# 4.0 动态代理来实现它。不幸的是,我仍然被困住了。代理的重点是模仿(通常,通常)预期的其他接口。使用 DynamicObject 需要我将所有客户端更改为使用“动态”而不是“ISecondaryInterface”。
有没有办法获得一个代理对象,这样当它包装一个 A 时,它(静态地?)宣传它支持 A 的接口;当它包装一个B时,它会宣传支持B的接口?
更新 2
例如:
entity-framework-4 - Entity Framework 4 将对象转换为动态代理
在 EF4 中,是否可以将 POCO 对象(使用 new MyObject() 创建)转换为动态代理(就像使用 ObjectContext.CreateObject() 一样)?
将 EF4 与 T4 模板一起用于 POCO。