AOP之PostSharp初见-OnExceptionAspect-创新互联

PostSharp 这个静态植入的aop框架我就不多说了,在以前的aop文件,我们也尝试用MSBuild+Mono.Cicel理解静态植入AOP的原理。最近公司准备购买Postsharp做一些AOP,减少开发是代码量,至于选择AOP相信也不用多说。我也在今天重新了解了些Postsharp最新版更新,这阵子的博客更新也少了,所以准备在MSBuild+Mono.Cicel的基础上再一些Postsharp系列。今天既然是初见,那么我们就从最简单的OnExceptionAspect开始。

创新互联致力于互联网品牌建设与网络营销,包括网站设计、成都网站制作、SEO优化、网络推广、整站优化营销策划推广、电子商务、移动互联网营销等。创新互联为不同类型的客户提供良好的互联网应用定制及解决方案,创新互联核心团队十载专注互联网开发,积累了丰富的网站经验,为广大企业客户提供一站式企业网站建设服务,在网站建设行业内树立了良好口碑。

一:OnExceptionAspect

起定义如下:

AOP之PostSharp初见-OnExceptionAspect

先写Aspect Attribute:

  1. View
  2. Serializable
  3. public
  4. public
  5. "时间[{0:yyyy年MM月dd日 HH时mm分}]方法{1}发生异常: {2}\n{3}"Name
  6. Continue
  7. public
  8. return

注意Postsharp的Aspect都需要标记为可序列化的,因为在编译时会为我们二进制序列化为资源,减少在运行是的开销,这个将在后面专门讲。

上面的code继承至OnExceptionAspect,并且override OnException和GetExceptionType,GetExceptionType为我们需要处理的特定异常。OnException为异常处理决策方法。我们的异常处理决策是当NullReferenceException时候我们会记录日志,并且方法指定继续(args.FlowBehavior = FlowBehavior.Continue)。

看看我们的测试代码:

  1. View
  2. static
  3. Read
  4. publicstatic
  5. null
  6. publicstatic
  7. "exception"

很显然我们的两个方法抛出了null异常和自定义异常,预期是NullReferenceException会被扑捉,而自定义异常会中断,运行效果如下:

AOP之PostSharp初见-OnExceptionAspect

我们在来看看postsharp为我们做了什么,当然是反编译看看:

二:Postsharp的Multicasting

1:Multicasting class:

 在这随便也说一下postsharp的Multicasting,多播这样翻译感觉有点死板呵呵,理解就行。利用这一点我们可以吧我们的aspect放在class,assembly等目标上匹配我们的多个目标。比如现在我们不想在我们的每个方法上加attribute,那我们可以选择在class上,如:

AOP之PostSharp初见-OnExceptionAspect

反编译,同样注入了我们每个方法:

AOP之PostSharp初见-OnExceptionAspect

2:Multicasting assembly:

我们同样可以利用

[assembly: PostSharpDemo.ExceptionAspectDemoAttribute()]

标记在我们的程序集上。

3:AttributeExclude:

但是注意这样也标记了我们的aspect,某些时候可能会导致堆栈溢出 ,我们可以用AttributeExclude=true来排除。

同时我们也可以设置应用目标:AttributeTargetMemberAttributes是一个枚举类型,定义如下:

AOP之PostSharp初见-OnExceptionAspect

比如我们需要过滤编译时候生成的目标(自动属性,action等等),

[assembly: PostSharpDemo1.MethodTraceAspect(AttributeExclude = true, AttributePriority = 0, AttributeTargetMemberAttributes = MulticastAttributes.CompilerGenerated)]

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:AOP之PostSharp初见-OnExceptionAspect-创新互联
分享路径:http://scyanting.com/article/djesjh.html