zoukankan      html  css  js  c++  java
  • PostSharp AOP编程:2.PostSharp的OnMethodBoundaryAspect类基本组成

         首先我们下载PostSharp 2.1.5.1,选择精简版本(价格为0美元)下订单地址是:http://www.sharpcrafters.com/purchase/compare,。我们需要注册一个OpenID,然后购买下来,它会发送一个精简版的License到你的注册邮箱中。点击PostSharp2.1.5.1安装文件输入Lincense即可完成。

         PostSharp是编译时将IL语言静态注入程序中,在免费版本中我们能够使用PostSharp对方法、字段和属性进行AOP截取数据而不能对事件进行AOP截取。下面我们来看看针对方法、字段和属性的AOP处理类:

         OnMethodBoundaryAspect

         继承于此类的特性A将围绕整个方法B进行静态注入式的处理,这个特性A可以重载覆写OnMethodBoundaryAspect类的OnEntry()、OnSuccess()、OnException()、OnExit()方法。如下代码:

        [Serializable]
    public sealed class LogsAttribute : OnMethodBoundaryAspect
    {
    //进入函数时
    public override void OnEntry(MethodExecutionArgs args)
    {
    base.OnEntry(args);
    }
    //函数执行成功时
    public override void OnSuccess(MethodExecutionArgs args)
    {
    base.OnSuccess(args);
    }
    //发生异常时
    public override void OnException(MethodExecutionArgs args)
    {
    base.OnException(args);
    }
    //退出函数时
    public override void OnExit(MethodExecutionArgs args)
    {
    base.OnExit(args);
    }
    }

           其覆写函数时的运行顺序和结果如下代码所示:

            int MethodA(object arg0, int arg1)
    {
    //函数进入时添加OnEntry()方法
    OnEntry();
    try
    {
    // 函数在此运行完毕
    //如果成功则继续运行OnSuccess()方法
    OnSuccess();
    return returnValue;
    }
    catch (Exception e)
    {
    //如果函数执行有问题,则运行OnException()方法
    OnException();
    }
    finally
    {
    //最后执行OnExit()方法
    OnExit();
    }
    }

          所以我们可以通过OnMethodBoundaryAspect编写特性去围绕方法截取数据,并且处理方法内部数据。如异常处理特性、日志记录特性、缓存记录特性和权限管理特性。

  • 相关阅读:
    struts2解决动态多文件上传的问题(上传文件与数据库字段一一对应)(转)
    Android应用如何开机自启动、自启动失败原因
    android操作ini工具类
    C++#define的用法(含特殊)
    c指针
    WP7备注(34)(UpdateSourceTrigger|ValidatesOnExceptions|NotifyOnValidationError)
    WP7备注(30)(数据绑定基本)
    WP7备注(38)(VisualStateManager)
    WP7备注(39)(ResourceDictionary)
    WP7备注(35)(Vector Graphics|Raster Graphics)
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2264345.html
Copyright © 2011-2022 走看看