问题标签 [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.

0 投票
4 回答
9175 浏览

c# - 如何在运行时替换方法实现?

我想拥有可以用我自己的自定义属性装饰的属性获取器和方法,并根据该属性的存在用不同的实现替换方法主体。此外,不同的实现将需要知道赋予自定义属性的构造函数参数,该属性在其中装饰方法。

这显然可以使用 AOP 来完成,比如 PostSharp 或 LinFu,但我想知道是否有一种方法可以做到这一点,它不涉及构建后处理步骤,因为添加它会使项目变得比我更喜欢的复杂化。

0 投票
3 回答
2550 浏览

entity-framework - EF 4.0 动态代理 POCO 对象与目标类型不匹配

我正在使用 EF 4.0 和 POCO。我在将记录插入数据库时​​偶然发现了这个错误。

对象“BI.Entities.QualityReason”上的属性访问器“QualityReasonID”引发以下异常:“对象与目标类型不匹配。”

将新记录保存到数据库后,Databind 到 GridView 发生错误。我确定了正在发生的事情,但我不确定为什么会发生,或者我是否错误地使用了 EF/POCO。任何见解将不胜感激。

发生异常是因为 IEnumerable 中的对象类型不同。表中的原始条目是 System.Data.Entity.DynamicProxies.QualityReason_E483AD567288B459706092F1825F53B1F93C65C5329F8095DD1D848B5D039F04} 类型,而新条目是 BI.Entities.QuailtyReason。

这是我插入新对象的方法。

我通过从以下位置更改获取代码解决了该错误:

所以为了解决这个错误,我每次都必须明确地选择 POCO 类。这感觉就像我做错了什么。有什么想法吗?

0 投票
2 回答
47609 浏览

java - 用于创建抽象类(而不是接口)代理的 java.lang.reflect.Proxy 的替代品

根据文档

[ java.lang.reflect.]Proxy提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。

newProxyMethod方法(负责生成动态代理)具有以下签名:

不幸的是,这阻止了生成扩展特定抽象类(而不是实现特定接口)的动态代理。这是有道理的,考虑到java.lang.reflect.Proxy“所有动态代理的超类”,从而防止另一个类成为超类。

因此,是否有任何替代方案java.lang.reflect.Proxy可以生成从特定抽象类继承的动态代理,将对抽象方法的所有调用重定向到调用处理程序?

例如,假设我有一个抽象类Dog

有没有一门课可以让我做以下事情?

0 投票
1 回答
358 浏览

c# - 是否可以通过 DynamicProxy 向类型添加属性?

我正在使用 Castle DynamicProxy 在运行时创建给定类型的代理 - 包括几个混合。

我试图弄清楚是否可以向代理添加任意属性,例如:

在运行时,我创建了一个新类型,如下所示:

从理论上讲,这似乎应该是可能的——也许我只是不知道如何用 Castle 来做这件事……有什么想法吗?谢谢!

0 投票
2 回答
1329 浏览

c# - 代理没有获取虚拟属性的属性?

使用DynamicProxy2.2 我想我看到了这个问题:

“代理上不可用的虚拟属性的可继承属性”

http://support.castleproject.org/projects/DYNPROXY/issues/view/DYNPROXY-ISSUE-109

我有一个带有虚拟属性的基类。该属性标有[XmlIgnore]。如果我序列化派生类,则不会序列化该属性。但是,如果我为派生类创建代理,则该属性将被序列化。这是一个显示问题的简单控制台应用程序:

这是一个错误吗?还是我做错了什么。快速解决方法是让我的IsDirty财产不是虚拟的。在我正在使用的场景中,这实际上是可以接受的,但我更希望它是虚拟的。

谢谢。


帕特里克斯蒂尔 http://weblogs.asp.net/psteele

0 投票
2 回答
1678 浏览

c# - 如何“真正”将 DynamicProxy 向下转换回其原始类型(通过 WCF 发送)

好的,情况是我们有一个类,PatientDto和一个由 Castle 生成的 DynamicProxy PatientDtoProxy,。

我们在 Silverlight 客户端中使用此代理,然后希望通过 WCF 服务调用将其发送回服务器。

WCF 服务合同需要一个PatientDto(即不是代理),并且如预期的那样,如果您尝试发送其他任何内容,它就会崩溃。

从本质上讲,我们觉得我们应该将其“转换”回 aPatientDto以使事情正常工作......但实际上,即使您将引用转换为 PatientDto,它也不会改变任何东西——WCF 仍然可以看到该对象在内存中作为一个PatientDtoProxy并炸毁。

显然,对新版本进行深度复制PatientDto是一种选择(并且确实有效),但令人不快。有什么我们没有想到的技术吗?

0 投票
6 回答
4784 浏览

java - 如何在反序列化时重新附加单例 Spring bean

在反序列化之后,我想将单例范围的依赖项重新注入原型 Spring bean。

假设我有一个 Process bean,它依赖于一个 Repository bean。Repository bean 的作用域是单例,但 Process bean 是原型作用域的。我定期序列化进程,然后反序列化它。

我不想序列化和反序列化存储库。我也不想在 Process 中保存对它的引用的成员变量上放置“瞬态”,也不想对某种代理的引用,或者除了声明为存储库的普通旧成员变量之外的任何东西。

我想我想要的是让 Process 的依赖项填充一个可序列化的代理,该代理指向(具有临时引用)存储库,并且在反序列化后,可以再次找到存储库。我如何自定义 Spring 来做到这一点?

我想我可以使用代理来保存依赖项引用,就像 . 我希望我能使用这种精确的技术。但是我看到 Spring 生成的代理是不可序列化的,文档说如果我将它与单例 bean 一起使用,我会得到一个异常。

我可以在单例 bean 上使用自定义范围,当被要求提供自定义范围的 bean 时,它总是会提供代理。这是一个好主意吗?其他想法?

0 投票
1 回答
590 浏览

mfc - 将 ActiveX 包装到拦截调用(ActiveX 代理包装器)

我的系统中有一个根深蒂固的 ActiveX 控件,我想了解/修复它!

我正在考虑用一个透明的代理类包装这个 MFC dll,该代理类将拦截成员等。

如何在 MFC 中解决这个问题。

谢谢!

0 投票
3 回答
4969 浏览

java - java动态代理与常规代理的用处

我需要一些建议,说明动态代理在哪些情况下比常规代理更有用。

我付出了很多努力来学习如何有效地使用动态代理。在这个问题中,抛开像 AspectJ 这样的框架基本上可以执行我们试图通过动态代理实现的所有事情,或者例如,CGLIB 可以用来解决动态代理的一些缺点。

用例

  • 装饰器 - 例如,对方法调用执行日志记录,或缓存复杂操作的返回值
  • 维护合同 - 也就是说,确保参数在可接受的范围内,并且返回类型符合可接受的值。
  • 适配器 - 在某处看到一些巧妙的文章,描述了这是如何有用的。不过,我很少遇到这种设计模式。

是其他人吗?

动态代理优势

  • 装饰器:记录所有方法调用,例如,

装饰器模式绝对有用,因为它允许对所有代理方法产生副作用(尽管这种行为是使用方面的书本示例......)。

  • 契约:与常规代理相比,我们不需要实现完整的接口。例如,

另一方面,合约只提供了避免需要实现完整接口的好处。再一次,重构代理方法会默默地使动态代理无效。

结论

所以我在这里看到的是一个真实的用例和一个有问题的用例。你怎么看?

0 投票
3 回答
9450 浏览

java - 动态代理和检查异常

如何让我的动态代理抛出检查异常?

我需要一个接口的透明包装器,它有时会抛出检查的异常,例如IOException. 如果没有第 3 方 AOP 或编写我自己的代理,是否有可能?手动修改接口的所有 20 个方法也不是一个选项。