- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一些简单的 DTO 类,例如:
[XmlType]
class Person : AbstractResource
{
[XmlElement("name")]
public virtual string FirstName { get; set; }
public virtual string Nickname { get { return "Mister cool"; } }
}
class SpecialPerson : Person
{
public override string NickName { get { return FirstName; } }
}
在我的代码中,我反序列化了 XML 文件中的 Person/SpecialPerson 对象列表,然后尝试使用 CreateClassProxyWithTarget 将它们全部包装在代理实例中。出于某种原因,FirstName 对于任何 SpecialPerson 代理始终为 null,NickName 始终为 null,但对于任何 Person 代理返回“Mister cool”。
我进入调试器并查看底层包装对象,它具有所有正确的值。我还注意不要拦截 FirstName 或 Nickname。我希望代理简单地调用包装对象,在某些情况下它会 [1] 但大多数情况下它不会。我做错了什么?
[1] 在我的拦截器代码中,我通过反射设置了包装对象的一些属性,那些 正确显示。但我不明白为什么这些属性会从底层对象中读取而其他属性不会。几乎就好像任何拦截的属性在调用 Invoke 时总是会调用包装的对象,但对于您为 ShouldInterceptMethod 返回 false 的任何方法,它不会。但这对我来说毫无意义,如果我说不要拦截包装对象上的方法,除了简单地使用包装对象的属性外,还应该采取其他可能的操作吗?
最佳答案
哦,亲爱的,我对回答自己的问题感到很遗憾,但我弄清楚出了什么问题,我希望这对遇到这种情况的其他人有所帮助。我无法在谷歌上找到任何关于此的信息。
所以问题是,即使您创建了一个包装现有对象的代理(即使用 CreateClassProxyWithTarget),它仍然创建了一个全新的对象。碰巧那个对象有办法得到被包装的对象。对于您未拦截的任何方法、属性等,它们将被在代理对象上调用。在属性的情况下,即使属性是虚拟的,这些也不会使用包装对象中的值,因为代理对象有自己的所有这些属性的副本。
要解决这个问题,您必须摆脱选择钩子(Hook)并截取所有内容。如果它是您实际上不想拦截的属性,您可以简单地调用 invocation.Proceed
。这将导致它将请求转发给包装的对象。
关于c# - CaSTLe DynamicProxy CreateClassProxyWithTarget 未将基础对象用于非拦截属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417654/
我正在考虑向我正在开发的库添加逻辑,这需要动态代理。我想从在生产环境中使用过这两个库的用户那里得到一些建议。其中一个是否优于另一个,是否有任何缺点使您不得不切换到另一个,等等。基本上告诉我您对图书馆的
我正在使用 caSTLe DynamicProxy,想知道是否有一种方法可以在不引用 CaSTLe DynamicProxy 的情况下检测类型是否是代理? 因此,当我使用 CaSTLe Dynamic
在我们的实际应用程序中,我们定义了一个属性,用于在方法或类中启用日志记录(通常的 AOP 用例)。当我们将此属性应用于 WPF 窗口类时,Ninject 无法创建此类的对象。这是重现该问题的最小示例:
有人知道是否可以控制通过 CaSTLe DynamicProxy 生成的类型的名称?我希望利用持久化由 CaSTLe 生成的程序集的能力,将一些具有某些特定功能的附加类添加到我的项目中,但我希望能够控
我正在使用 CaSTLe DynamicProxy 在运行时创建给定类型的代理 - 包括几个混合。 我正在尝试弄清楚是否可以向代理添加任意属性,例如: class BaseType { strin
我一直在研究使用 DynamicProxy 类,但我对这个概念还很陌生。在我走得太远之前,我想知道这些类与 IntelliSense 和类型安全的配合情况如何? 我只是害怕使用像 Castle Dyn
我们在项目中使用 DynamicProxy。我已经为一些方法创建了一个拦截器。 我知道可以在 CaSTLe.DynamicProxy.IInterceptor 对象中获取方法参数。 拦截器能否在调用
我试图将自定义属性分配给来自动态代理的类 System.Data.Entity.DynamicProxies.Login_A2947F53... 示例类登录 public partial class
我有这样一个场景: 我正在使用拦截器来捕获对主项目引用的程序集内部类(我们称之为功能)的调用。 Assembly Feature 由 NuGet 安装(它不是公开的,而是我们内部的)并且引用了另一个程
下面是来自 Intercept 的代码实现 IInterceptor 的自定义类型上的方法的 Castle Dynamic Proxy图书馆。此片段来自 AOP发布的基于日志记录的概念验证控制台应用程
尝试在 CaSTLe 中使用 TypedFactoryFacility 时遇到问题。 我正在使用 CaSTLe v3.0.0 并且我创建了一个 ViewFactory,使用 injector.AddF
我们基本上有一个如下所示的类,它使用 CaSTLe.DynamicProxy 进行拦截。 using System; using System.Collections.Concurrent; usin
我有 2 个类,一个用于访问数据库,另一个子类使用缓存。我可以更改这两个类的源代码,但是有许多类具有不同的结构,所以我正在寻找一种方法来制作通用解决方案,这将帮助我只拦截我用 Attribute 标记
我可能遗漏了一些非常简单的东西。 我只是想写一个非常简单的 DynamicProxy 用法示例 - 我基本上想拦截调用并显示方法名称和参数值。我有如下代码: public class FirstKin
我正在尝试制作一个动态代理作为现有库的包装器,目标是处理所有操作(属性访问、成员访问、方法调用……)通过动态调度的现有对象。我可能需要它来处理交叉问题,例如更好的错误处理、日志记录或对此对象的访问控制
我正在使用 CreateClassProxyWithTarget 方法装饰现有对象。但是,构造函数和初始化代码被调用了两次。我已经有一个“构建的”实例(目标)。我明白为什么会发生这种情况,但除了使用空
我有一些简单的 DTO 类,例如: [XmlType] class Person : AbstractResource { [XmlElement("name")] public virtua
假设我有一个由第三方创建的 CaSTLe.DynamicProxy 对象。在本例中是 Rhino.Mocks。 var rhinoObj = MockRepository.GenerateMock()
White UI 自动化库广泛使用 Castle Project' s DynamicProxy 2. 据我了解,DynamicProxy 用于“包装”MS UI Automation 对象,并用于检
一个例子最能说明问题: public interface IA { void foo(); void bar(); } public class A : IA { public virtu
我是一名优秀的程序员,十分优秀!