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编写特性去围绕方法截取数据,并且处理方法内部数据。如异常处理特性、日志记录特性、缓存记录特性和权限管理特性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值