问题标签 [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# - 如何在运行时替换方法实现?
我想拥有可以用我自己的自定义属性装饰的属性获取器和方法,并根据该属性的存在用不同的实现替换方法主体。此外,不同的实现将需要知道赋予自定义属性的构造函数参数,该属性在其中装饰方法。
这显然可以使用 AOP 来完成,比如 PostSharp 或 LinFu,但我想知道是否有一种方法可以做到这一点,它不涉及构建后处理步骤,因为添加它会使项目变得比我更喜欢的复杂化。
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 类。这感觉就像我做错了什么。有什么想法吗?
java - 用于创建抽象类(而不是接口)代理的 java.lang.reflect.Proxy 的替代品
根据文档:
[
java.lang.reflect.
]Proxy
提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。
该newProxyMethod
方法(负责生成动态代理)具有以下签名:
不幸的是,这阻止了生成扩展特定抽象类(而不是实现特定接口)的动态代理。这是有道理的,考虑到java.lang.reflect.Proxy
“所有动态代理的超类”,从而防止另一个类成为超类。
因此,是否有任何替代方案java.lang.reflect.Proxy
可以生成从特定抽象类继承的动态代理,将对抽象方法的所有调用重定向到调用处理程序?
例如,假设我有一个抽象类Dog
:
有没有一门课可以让我做以下事情?
c# - 是否可以通过 DynamicProxy 向类型添加属性?
我正在使用 Castle DynamicProxy 在运行时创建给定类型的代理 - 包括几个混合。
我试图弄清楚是否可以向代理添加任意属性,例如:
在运行时,我创建了一个新类型,如下所示:
从理论上讲,这似乎应该是可能的——也许我只是不知道如何用 Castle 来做这件事……有什么想法吗?谢谢!
c# - 代理没有获取虚拟属性的属性?
使用DynamicProxy
2.2 我想我看到了这个问题:
“代理上不可用的虚拟属性的可继承属性”
http://support.castleproject.org/projects/DYNPROXY/issues/view/DYNPROXY-ISSUE-109
我有一个带有虚拟属性的基类。该属性标有[XmlIgnore]
。如果我序列化派生类,则不会序列化该属性。但是,如果我为派生类创建代理,则该属性将被序列化。这是一个显示问题的简单控制台应用程序:
这是一个错误吗?还是我做错了什么。快速解决方法是让我的IsDirty
财产不是虚拟的。在我正在使用的场景中,这实际上是可以接受的,但我更希望它是虚拟的。
谢谢。
帕特里克斯蒂尔 http://weblogs.asp.net/psteele
c# - 如何“真正”将 DynamicProxy 向下转换回其原始类型(通过 WCF 发送)
好的,情况是我们有一个类,PatientDto
和一个由 Castle 生成的 DynamicProxy PatientDtoProxy
,。
我们在 Silverlight 客户端中使用此代理,然后希望通过 WCF 服务调用将其发送回服务器。
WCF 服务合同需要一个PatientDto
(即不是代理),并且如预期的那样,如果您尝试发送其他任何内容,它就会崩溃。
从本质上讲,我们觉得我们应该将其“转换”回 aPatientDto
以使事情正常工作......但实际上,即使您将引用转换为 PatientDto,它也不会改变任何东西——WCF 仍然可以看到该对象在内存中作为一个PatientDtoProxy
并炸毁。
显然,对新版本进行深度复制PatientDto
是一种选择(并且确实有效),但令人不快。有什么我们没有想到的技术吗?
java - 如何在反序列化时重新附加单例 Spring bean
在反序列化之后,我想将单例范围的依赖项重新注入原型 Spring bean。
假设我有一个 Process bean,它依赖于一个 Repository bean。Repository bean 的作用域是单例,但 Process bean 是原型作用域的。我定期序列化进程,然后反序列化它。
我不想序列化和反序列化存储库。我也不想在 Process 中保存对它的引用的成员变量上放置“瞬态”,也不想对某种代理的引用,或者除了声明为存储库的普通旧成员变量之外的任何东西。
我想我想要的是让 Process 的依赖项填充一个可序列化的代理,该代理指向(具有临时引用)存储库,并且在反序列化后,可以再次找到存储库。我如何自定义 Spring 来做到这一点?
我想我可以使用代理来保存依赖项引用,就像 . 我希望我能使用这种精确的技术。但是我看到 Spring 生成的代理是不可序列化的,文档说如果我将它与单例 bean 一起使用,我会得到一个异常。
我可以在单例 bean 上使用自定义范围,当被要求提供自定义范围的 bean 时,它总是会提供代理。这是一个好主意吗?其他想法?
mfc - 将 ActiveX 包装到拦截调用(ActiveX 代理包装器)
我的系统中有一个根深蒂固的 ActiveX 控件,我想了解/修复它!
我正在考虑用一个透明的代理类包装这个 MFC dll,该代理类将拦截成员等。
如何在 MFC 中解决这个问题。
谢谢!
java - java动态代理与常规代理的用处
我需要一些建议,说明动态代理在哪些情况下比常规代理更有用。
我付出了很多努力来学习如何有效地使用动态代理。在这个问题中,抛开像 AspectJ 这样的框架基本上可以执行我们试图通过动态代理实现的所有事情,或者例如,CGLIB 可以用来解决动态代理的一些缺点。
用例
- 装饰器 - 例如,对方法调用执行日志记录,或缓存复杂操作的返回值
- 维护合同 - 也就是说,确保参数在可接受的范围内,并且返回类型符合可接受的值。
- 适配器 - 在某处看到一些巧妙的文章,描述了这是如何有用的。不过,我很少遇到这种设计模式。
是其他人吗?
动态代理优势
- 装饰器:记录所有方法调用,例如,
装饰器模式绝对有用,因为它允许对所有代理方法产生副作用(尽管这种行为是使用方面的书本示例......)。
- 契约:与常规代理相比,我们不需要实现完整的接口。例如,
另一方面,合约只提供了避免需要实现完整接口的好处。再一次,重构代理方法会默默地使动态代理无效。
结论
所以我在这里看到的是一个真实的用例和一个有问题的用例。你怎么看?
java - 动态代理和检查异常
如何让我的动态代理抛出检查异常?
我需要一个接口的透明包装器,它有时会抛出检查的异常,例如IOException
. 如果没有第 3 方 AOP 或编写我自己的代理,是否有可能?手动修改接口的所有 20 个方法也不是一个选项。