在上一篇中我們了解了簡單的OnExceptionAspectAOP面向方向切入,在第一節(jié)中我們將繼續(xù)我們的PostSharp AOP系列的OnMethodBoundaryAspect方法行為的切入,這也是我們常用的AOP切入。
裕民網(wǎng)站建設公司成都創(chuàng)新互聯(lián)公司,裕民網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為裕民成百上千家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設公司要多少錢,請找那個售后服務好的裕民做網(wǎng)站的公司定做!
OnMethodBoundaryAspect顧名思義其為對方法邊界的切入,定義如下:
在這里提供了四個方法邊界點為我們切入。我們可以很輕松的對方法權限,執(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é)說的 多播(Multicasting)加到我們的class,assembly上統(tǒng)計我們所有的方法。
在最后在廢話一句,我們可以很輕松的指定我們的方法(比如使我們的wcf服務操作契約)的訪問權限,比如基于操作權限的功能點function的處理,如[PowerAttribute(“Add,Edit”)]這樣簡單處理,我們只需要在OnEnter中aspect,決定方法FlowBehavior行為,剩下的事情教給大家自己實踐。
歡迎大家積極指正和多多交流。
附件:demo下載
其他AOP參考:
分享題目:AOP之PostSharp2-OnMethodBoundaryAspect
文章轉載:http://m.rwnh.cn/article10/jepddo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、Google、用戶體驗、軟件開發(fā)、ChatGPT、關鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)