【发布时间】:2014-03-15 08:11:18
【问题描述】:
我有一些简单的 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 将它们全部包装在代理实例中。出于某种原因,对于任何 SpecialPerson 代理,FirstName 始终为 null 并且 NickName 为 null,但对于任何 Person 代理返回“Mister cool”。
我进入调试器并查看了底层的包装对象,它具有所有正确的值。我还注意不要拦截名字或昵称。我希望代理简单地调用被包装的对象,并且在某些情况下它会 [1] 但大多数情况下它不会。我做错了什么?
[1] 在我的拦截器代码中,我通过反射设置了被包装对象的一些属性,并且 那些 正确显示。但我不明白为什么这些属性会从底层对象中读取,而其他属性则不会。当调用 Invoke 时,几乎就像任何被截获的属性都会调用被包装的对象,但对于您为 ShouldInterceptMethod 返回 false 的任何方法,它不会。但这对我来说毫无意义,如果我说不拦截包装对象上的方法,应该采取什么其他可能的操作,而只是使用包装对象的属性?
【问题讨论】: