欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-09-27 18:50:09
问题 在实际开发过程当中我们可能会针对某些类型使用动态代理技术(AOP),注入了一些拦截器进行处理,但是一旦某个类型被动态代理了,那么就会生成一个代理类。这个时候在该类内部使用 方法获取到的 类型并不是实际类型的 ,而是代理类的 。 解决 那么我们如何在代理类当中获取到具体类型的 呢?其实 Cast ......

问题

在实际开发过程当中我们可能会针对某些类型使用动态代理技术(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;
}