博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AOP之PostSharp2-OnMethodBoundaryAspect
阅读量:6097 次
发布时间:2019-06-20

本文共 1554 字,大约阅读时间需要 5 分钟。

在上一篇中我们了解了简单的AOP面向方向切入,在第一节中我们将继续我们的PostSharp AOP系列的OnMethodBoundaryAspect方法行为的切入,这也是我们常用的AOP切入。

   OnMethodBoundaryAspect顾名思义其为对方法边界的切入,定义如下:

在这里提供了四个方法边界点为我们切入。我们可以很轻松的对方法权限,执行时间,参数合法性等aspect。

aspect传入参数MethodExecutionArgs给我如下信息,同时还包括父类AdviceArgs的Instance属性,实例方法才有值,静态方法则为null,

这里还需要说一下属性FlowBehavior:表示方法执行行为,是一个枚举变量:

二:执行时间统计demo

下面我们实践一个方法执行时间统计demo:

 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using PostSharp.Aspects;  
  6.  
  7. namespace PostSharpDemo  
  8. {  
  9.     [Serializable]  
  10.     public class OnMethodBoundaryAspectDemoAttribute : OnMethodBoundaryAspect  
  11.     {  
  12.         public bool Enabled  
  13.         {  
  14.             get;  
  15.             set;  
  16.         }  
  17.  
  18.         public override void OnEntry(MethodExecutionArgs args)  
  19.         {  
  20.             if (this.Enabled)  
  21.             {  
  22.                 args.MethodExecutionTag = System.Diagnostics.Stopwatch.StartNew();  
  23.             }  
  24.         }  
  25.         public override void OnExit(MethodExecutionArgs args)  
  26.         {  
  27.             if (this.Enabled)  
  28.             {  
  29.                 var sw = args.MethodExecutionTag as System.Diagnostics.Stopwatch;  
  30.                 if (sw != null)  
  31.                 {  
  32.                     sw.Stop();  
  33.                     Console.WriteLine(String.Format("方法{0}执行时间为:{1}s", args.Method.Name, sw.ElapsedMilliseconds / 1000));  
  34.                     sw = null;  
  35.                 }  
  36.             }  
  37.         }  
  38.     }  
  39. }  
测试方法:
 
 
  1. [OnMethodBoundaryAspectDemoAttribute(Enabled=true)]   
  2.        public static void OnMethodBoundaryAspectDemoAttributeTest()   
  3.        {   
  4.            System.Threading.Thread.Sleep(2000);   
  5.        } 

结果如下:

注:这里我们也可以用到我们上节说的 多播(Multicasting)加到我们的class,assembly上统计我们所有的方法。

在最后在废话一句,我们可以很轻松的指定我们的方法(比如使我们的wcf服务操作契约)的访问权限,比如基于操作权限的功能点function的处理,如[PowerAttribute(“Add,Edit”)]这样简单处理,我们只需要在OnEnter中aspect,决定方法FlowBehavior行为,剩下的事情教给大家自己实践。

   欢迎大家积极指正和多多交流。

附件:

其他AOP参考:

 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/835258,如需转载请自行联系原作者
你可能感兴趣的文章
Win10桌面奔溃怎么办?雨林木风Win10奔溃解决方法教程
查看>>
mysql Inoodb 内核
查看>>
Redis 基础
查看>>
UITextField的returnkey点击事件
查看>>
特殊字体引用
查看>>
owlcar 用法心得 自定义导航
查看>>
数据结构 学习笔记03——栈与队列
查看>>
DB2 OLAP函数的使用(转)
查看>>
数学之美系列二十 -- 自然语言处理的教父 马库斯
查看>>
Android实现自定义位置无标题Dialog
查看>>
面试总结
查看>>
Chrome浏览器播放HTML5音频没声音的解决方案
查看>>
easyui datagrid 行编辑功能
查看>>
类,对象与实例变量
查看>>
HDU 2818 (矢量并查集)
查看>>
【转】php字符串加密解密
查看>>
22. linux 常用命令
查看>>
ASP.Net 使用GridView模板删除一行的用法
查看>>
(十六)字段表集合
查看>>
JPGraph
查看>>