15

我正在使用 Castle DynamicProxy,而我的 ViewModels 是一个代理,如下所示:

命名空间 MyApplication.ViewModels
{
   公共类 MyViewModel:BaseViewModel、IMyViewModel
   {
   }
}

我的视图模型的代理看起来像这样:

{Name = "IRootViewModelProxyffecb133f590422098ca7c0ac13b8f98" FullName = "IRootViewModelProxyffecb133f590422098ca7c0ac13b8f98"}

我想获取被代理的实际类型的实际类型或命名空间。有没有办法做到这一点?我想要返回 MyApplication.ViewModels.MyViewModel 类型的东西。如果我使用 concreate 类作为代理,BaseType 返回被代理的实际类,但在使用接口时,BaseType 将返回 System.Object。

4

2 回答 2

19

您似乎可以执行以下操作来获取实际类型:

(代理作为 IProxyTargetAccessor).DynProxyGetTarget().GetType()
于 2009-09-14T10:44:06.707 回答
11

如果您代理的是类而不是接口,则可以像这样获取底层类型:

var unproxiedType = ProxyUtil.GetUnproxiedType(proxy);

如果您无权访问 ProxyUtil,这也可以:

private static Type GetUnproxiedType(object source)
{
   var proxy = (source as IProxyTargetAccessor);

   if (proxy == null)
     return source.GetType();

   return proxy.GetType().BaseType;            
}
于 2011-05-13T07:44:14.320 回答