Castle Windsor 的动态代理类如何获取实际类型

问题

在实际开发过程当中我们可能会针对某些类型使用动态代理技术(AOP),注入了一些拦截器进行处理,但是一旦某个类型被动态代理了,那么就会生成一个代理类。这个时候在该类内部使用 GetType() 方法获取到的 Type 类型并不是实际类型的 Type,而是代理类的 Type

解决

那么我们如何在代理类当中获取到具体类型的 Type 呢?其实 Castle 给我们提供了一个工具类,叫做 ProxyUtil ,可以使用该工具类来获取到代理类所拦截的具体类型,下面的代码就是具体的使用方法。

DEMO 代码:

/// <summary>
/// 获得实例对象的真实类型
/// </summary>
/// <param name="instance">待获取类型的实例对象</param>
/// <returns>实例对象的真实类型</returns>
public static Type GetProxyClassRealType(this object instance)
{
   Type realType;
   if (ProxyUtil.IsProxy(instance))
  {
       realType = ProxyUtil.GetUnproxiedType(instance);
  }
   else
  {
       realType = instance.GetType();
  }

   return realType;
}

转载于:https://www.cnblogs.com/myzony/p/10487418.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值