AOP之PostSharp2-OnMethodBoundaryAspect
在上一篇中我們了解了簡單的OnExceptionAspectAOP面向方向切入,在第一節(jié)中我們將繼續(xù)我們的PostSharp AOP系列的OnMethodBoundaryAspect方法行為的切入,這也是我們常用的AOP切入。
?? OnMethodBoundaryAspect顧名思義其為對方法邊界的切入,定義如下:
在這里提供了四個方法邊界點為我們切入。我們可以很輕松的對方法權(quán)限,執(zhí)行時間,參數(shù)合法性等aspect。
aspect傳入?yún)?shù)MethodExecutionArgs給我如下信息,同時還包括父類AdviceArgs的Instance屬性,實例方法才有值,靜態(tài)方法則為null,
這里還需要說一下屬性FlowBehavior:表示方法執(zhí)行行為,是一個枚舉變量:
二:執(zhí)行時間統(tǒng)計demo
下面我們實踐一個方法執(zhí)行時間統(tǒng)計demo:
using?System;using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?PostSharp.Aspects;
namespace?PostSharpDemo
{
????[Serializable]
????public?class?OnMethodBoundaryAspectDemoAttribute?:?OnMethodBoundaryAspect
????{
????????public?bool?Enabled
????????{
????????????get;
????????????set;
????????}
????????public?override?void?OnEntry(MethodExecutionArgs?args)
????????{
????????????if?(this.Enabled)
????????????{
????????????????args.MethodExecutionTag?=?System.Diagnostics.Stopwatch.StartNew();
????????????}
????????}
????????public?override?void?OnExit(MethodExecutionArgs?args)
????????{
????????????if?(this.Enabled)
????????????{
????????????????var?sw?=?args.MethodExecutionTag?as?System.Diagnostics.Stopwatch;
????????????????if?(sw?!=?null)
????????????????{
????????????????????sw.Stop();
????????????????????Console.WriteLine(String.Format("方法{0}執(zhí)行時間為:{1}s",?args.Method.Name,?sw.ElapsedMilliseconds?/?1000));
????????????????????sw?=?null;
????????????????}
????????????}
????????}
????}
}
測試方法:
[OnMethodBoundaryAspectDemoAttribute(Enabled=true)]????????public?static?void?OnMethodBoundaryAspectDemoAttributeTest()?
???????{?
???????????System.Threading.Thread.Sleep(2000);?
???????}
結(jié)果如下:
注:這里我們也可以用到我們上節(jié)說的 多播(Multicasting)加到我們的class,assembly上統(tǒng)計我們所有的方法。
在最后在廢話一句,我們可以很輕松的指定我們的方法(比如使我們的wcf服務(wù)操作契約)的訪問權(quán)限,比如基于操作權(quán)限的功能點function的處理,如[PowerAttribute(“Add,Edit”)]這樣簡單處理,我們只需要在OnEnter中aspect,決定方法FlowBehavior行為,剩下的事情教給大家自己實踐。
?? 歡迎大家積極指正和多多交流。
附件:demo下載
其他AOP參考:
AOP之PostSharp初見-OnExceptionAspect AOP之PostSharp2-OnMethodBoundaryAspect AOP之PostSharp3-MethodInterceptionAspect AOP之PostSharp4-實現(xiàn)類INotifyPropertyChanged植入 AOP之PostSharp5-LocationInterceptionAspect http://www.cnblogs.com/whitewolf/category/312638.html本文轉(zhuǎn)自破狼博客園博客,原文鏈接:http://www.cnblogs.com/whitewolf/archive/2011/12/04/PostSharp2.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的AOP之PostSharp2-OnMethodBoundaryAspect的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入剖析 iOS 编译 Clang LL
- 下一篇: Atitit 项目的主体设计与结构文档