温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PostSharp AOP编程:4.PostSharp的OnExceptionAspect类基本组成

发布时间:2020-06-25 03:55:27 阅读:500 作者:程兴亮 栏目:编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

        在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(35);         Console.ReadLine();     } } 

        如需源码请点击 PostSharpOnExceptionAspect.zip  下载,运行效果如下图:

PostSharp AOP编程:4.PostSharp的OnExceptionAspect类基本组成

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×