【发布时间】:2011-02-11 14:56:58
【问题描述】:
虽然 .NET 4 框架提供 Assembly.IsDynamic 方法,但 .NET 2.0/3.5 并非如此。
用例很简单:出于日志记录的目的,我想确定一个实体的底层类型名称,该实体可能由动态代理包装,而没有任何对 NHibernate 或 Castle 的引用(它们知道关于代理)
例如,我可能有一个CatProxYadaYada,但我对Cat 感兴趣。
获取该类型的最简单方法是什么?我在想这个骨架:
var type = obj.GetType();
while (IsProxy_Dynamic_Whatever(obj))
type = type.BaseType;
return type;
【问题讨论】:
-
这打破了代理提供的抽象——其主要思想是消费者不应该知道/关心差异。您正在做什么类型的日志记录,需要您知道这一点?
-
@Aaronaught,我只想记录诸如“Cat #324 验证失败”之类的内容,将方法传递给从我的 Entity 类继承的对象。也就是说,代码甚至不知道该实例是 Cat 的(代理)。实际上,我感兴趣的不是类型,而是类型 name。
标签: c# reflection .net-3.5