您好,登錄后才能下訂單哦!
在PostSharp中得OnExceptionAspect類是針對異常的消息截取。繼承于它的特性將可以在發生異常的時候對方法體內的異常截取,并且做出動作,看是否停止本程序運行,還是忽略異常。
這個類里面有兩個主要的函數可以重載分別是OnException(MethodExecutionArgs args)、GetExceptionType(System.Reflection.MethodBase targetMethod)。他們分別意義如下:
OnException(MethodExecutionArgs args):當發生異常時截取異常發生的位置(在哪個命名空間?哪個類?哪個方法?)、異常類型、異常消息等信息,并且可以異常將如何處理。
GetExceptionType(System.Reflection.MethodBase targetMethod):設置需要攔截的異常類型,比如設置需要攔截參數異常,那么其他的異常類型發生時將不會被此特性所攔截。
首先我們編寫一個繼承于OnExceptionAspect類的特性,并且重載相關函數如下代碼:
- [Serializable]
- public class ExceptionAttribute : OnExceptionAspect
- {
- //當異常發生時
- public override void OnException(MethodExecutionArgs args)
- {
- Console.WriteLine("______________________________________________________________________________");
- Console.WriteLine("異常時間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); ;
- Console.WriteLine("異常類名:" + args.Method.DeclaringType.FullName);
- Console.WriteLine("異常方法:" + args.Method.Name);
- Console.WriteLine("異常信息:" + args.Exception.ToString());
- args.FlowBehavior = FlowBehavior.Continue;
- }
- //需要攔截的異常類型為ArgumentException
- public override Type GetExceptionType(System.Reflection.MethodBase targetMethod)
- {
- return typeof(ArgumentException);
- }
- }
其次我們編寫一個目標類,此類中含有一個方法,方法內拋出參數異常,并為其添加Exception的特性,如以下代碼所示:
- class People
- {
- [Exception]
- public void Test(int a, int b)
- {
- throw new ArgumentException("這里有參數錯誤,請檢查參數");
- }
- }
再編寫一個對比目標類,要實現同樣的效果需要遠遠多于我們使用PostSharp的情況,而且會讓我們的邏輯處理更為復雜和麻煩,如下代碼所示:
- class Pelple1
- {
- public void Test(int a, int b)
- {
- try
- {
- throw new ArgumentException("這里有參數錯誤,請檢查參數");
- }
- catch (ArgumentException args)
- {
- Console.WriteLine("______________________________________________________________________________");
- Console.WriteLine("異常時間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); ;
- Console.WriteLine("異常信息:" + args.ToString());
- }
- }
- }
最后我們在客戶端初始化People類并且引用方法如下代碼:
- class Program
- {
- static void Main(string[] args)
- {
- People p = new People();
- p.Test(3,5);
- Pelple1 p1 = new Pelple1();
- p1.Test(3, 5);
- Console.ReadLine();
- }
- }
如需源碼請點擊 PostSharpOnExceptionAspect.zip 下載,運行效果如下圖:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。