知识大全 C# AOP微型框架实现

Posted 框架

篇首语:人非生而知之,孰能无惑?惑而不从师,其为惑也,终不解矣。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C# AOP微型框架实现相关的知识,希望对你有一定的参考价值。

C# AOP微型框架实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在前面的系列文章中 我介绍了消息 代理与AOP的关系 这次将我自己实现的一个AOP微型框架拿出来和大家交流一下     AOP的最基本功能就是实现特定的预处理和后处理 我通过代理实现了此微型框架     先来看看构成此微型框架的 个 cs文件      CommonDef cs 用于定义最基本的AOP接口    /************************************* CommonDef cs **************************    using System;  using System Runtime Remoting Messaging ;    namespace EnterpriseServerBase Aop    /// <summary>  /// IAopOperator AOP操作符接口 包括前处理和后处理  ///   /// </summary>  public interface IAopOperator    void PreProcess(IMessage requestMsg ) ;  void PostProcess(IMessage requestMsg IMessage Respond) ;      /// <summary>  /// IAopProxyFactory 用于创建特定的Aop代理的实例 IAopProxyFactory的作用是使AopProxyAttribute独立于具体的AOP代理类   /// </summary>  public interface IAopProxyFactory    AopProxyBase CreateAopProxyInstance(MarshalByRefObject obj Type type) ;           AopProxyBase AOP代理的基类 所有自定义AOP代理类都从此类派生 覆写IAopOperator接口 实现具体的前/后处理     using System;  using System Runtime Remoting ;  using System Runtime Remoting Proxies ;  using System Runtime Remoting Messaging ;  using System Runtime Remoting Services ;  using System Runtime Remoting Activation ;    namespace EnterpriseServerBase Aop    /// <summary>  /// AopProxyBase 所有自定义AOP代理类都从此类派生 覆写IAopOperator接口 实现具体的前/后处理   ///   /// </summary>  public abstract class AopProxyBase : RealProxy IAopOperator    private readonly MarshalByRefObject target ; //默认透明代理    public AopProxyBase(MarshalByRefObject obj Type type) :base(type)    this target = obj ;      #region Invoke  public override IMessage Invoke(IMessage msg)    bool useAspect = false ;  IMethodCallMessage call = (IMethodCallMessage)msg ;    //查询目标方法是否使用了启用AOP的MethodAopSwitcherAttribute  foreach(Attribute attr in call MethodBase GetCustomAttributes(false))    MethodAopSwitcherAttribute mehodAopAttr = attr as MethodAopSwitcherAttribute ;  if(mehodAopAttr != null)    if(mehodAopAttr UseAspect)    useAspect = true ;  break ;          if(useAspect)    this PreProcess(msg) ;      //如果触发的是构造函数 此时target的构建还未开始  IConstructionCallMessage ctor = call as IConstructionCallMessage ;  if(ctor != null)    //获取最底层的默认真实代理  RealProxy default_proxy = RemotingServices GetRealProxy(this target) ;    default_proxy InitializeServerObject(ctor) ;  MarshalByRefObject tp = (MarshalByRefObject)this GetTransparentProxy() ; //自定义的透明代理 this    return EnterpriseServicesHelper CreateConstructionReturnMessage(ctor tp);      IMethodReturnMessage result_msg = RemotingServices ExecuteMessage(this target call) ; //将消息转化为堆栈 并执行目标方法 方法完成后 再将堆栈转化为消息    if(useAspect)    this PostProcess(msg result_msg) ;      return result_msg ;      #endregion    #region IAopOperator 成员    public abstract void PreProcess(IMessage requestMsg) ;  public abstract void PostProcess(IMessage requestMsg IMessage Respond) ;  #endregion             AopProxyAttribute AOP代理特性    /****************************** AopProxyAttribute  ************************************    using System;  using System Runtime Remoting ;  using System Runtime Remoting Proxies ;      namespace EnterpriseServerBase Aop    /// <summary>  /// AopProxyAttribute  /// AOP代理特性 如果一个类想实现具体的AOP 只要实现AopProxyBase和IAopProxyFactory 然后加上该特性即可   ///   /// </summary>    [AttributeUsage(AttributeTargets Class AllowMultiple = false)]  public class AopProxyAttribute : ProxyAttribute    private IAopProxyFactory proxyFactory = null ;    public AopProxyAttribute(Type factoryType)    this proxyFactory = (IAopProxyFactory)Activator CreateInstance(factoryType) ;      #region CreateInstance  /// <summary>  /// 获得目标对象的自定义透明代理  /// </summary>  public override MarshalByRefObject CreateInstance(Type serverType)//serverType是被AopProxyAttribute修饰的类    //未初始化的实例的默认透明代理  MarshalByRefObject target = base CreateInstance (serverType); //得到位初始化的实例(ctor未执行)  object[] args = target serverType ;  //AopProxyBase rp = (AopProxyBase)Activator CreateInstance(this realProxyType args) ; //Activator CreateInstance在调用ctor时通过了代理 所以此处将会失败    //得到自定义的真实代理  AopProxyBase rp = this proxyFactory CreateAopProxyInstance(target serverType) ;//new AopControlProxy(target serverType) ;  return (MarshalByRefObject)rp GetTransparentProxy() ;    #endregion         MethodAopSwitcherAttribute cs    /**************************** MethodAopSwitcherAttribute cs *************************    using System;    namespace EnterpriseServerBase Aop    /// <summary>  /// MethodAopSwitcherAttribute 用于决定一个被AopProxyAttribute修饰的class的某个特定方法是否启用截获   /// 创建原因 绝大多数时候我们只希望对某个类的一部分Method而不是所有Method使用截获   /// 使用方法 如果一个方法没有使用MethodAopSwitcherAttribute特性或使用MethodAopSwitcherAttribute(false)修饰   ///    都不会对其进行截获 只对使用了MethodAopSwitcherAttribute(true)启用截获   ///   /// </summary>  [AttributeUsage(AttributeTargets Method AllowMultiple = false )]  public class MethodAopSwitcherAttribute : Attribute    private bool useAspect = false ;    public MethodAopSwitcherAttribute(bool useAop)    this useAspect = useAop ;      public bool UseAspect    get    return this useAspect ;         cha138/Article/program/net/201311/11374

相关参考

知识大全 Spring事务处理及其AOP框架的内幕

Spring事务处理及其AOP框架的内幕  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ***注

知识大全 SSH集成框架下真正实现Spring AOP拦截功能

SSH集成框架下真正实现SpringAOP拦截功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Visual C#编写3D游戏框架示例

VisualC#编写3D游戏框架示例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!你可能对实际地编

知识大全 c# 复习、笔试全攻略(一、.net 框架)

cha138/Article/program/net/201404/30520

知识大全 C#实现的多线程异步数据包接收器框架

C#实现的多线程异步数据包接收器框架  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  几天前在博问

知识大全 C#实现的多线程异步Socket数据包接收器框架

C#实现的多线程异步Socket数据包接收器框架  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 C# 实现的多线程异步Socket数据包接收器框架

C#实现的多线程异步Socket数据包接收器框架  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 探讨C#编程语言的未来

探讨C#编程语言的未来  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作为微软NET框架的标志性

知识大全 AOP概念

SpringAOP面向方面编程原理:AOP概念  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  A

知识大全 PHP系列学习之AOP[2]

PHP系列学习之AOP[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  AOP通知类型  通