前言
说起AOP,其实我们在做MVC/API 的时候应该没少接触,比如说各种的Fitter 就是典型的AOP了。
本来在使用Polly的时候我最初的打算是使用过滤器来实现的,后来发现实现起来相当的困难,利用NetCore的中间以及过滤器去实现一个AOP的独立应用服务简直了,我有点无奈,相当的难写。
后来又使用了,Autofac 做拦截器来实现也是有点小无力。估计还是基础太薄弱。
目前我了解到的实现Polly比较方便的第三方Aop框架的有
(1)、AspectCore:是一款 AspNetCore轻量级的Aop解决方案。
(2)、Dora.Interception 老A写的一个Aop解决方案,这个用到解决方案中就需要等到老A升级下一版了。
AspNetCore中的过滤器:
在使用Policy 的时候主要点是策略的制定,在保证代码整洁,并且不破坏当前代码逻辑的情况下,使用Aop是最合适的解决方案了。
当我们使用过滤器的时候我们会发现,Pollicy 制定了一个错误规则,并且在错误过滤器中使用、抓取不到任何的错误信息,因为错误信息被错误过滤器抓取了,这个时候不会触发Pollicy
然后尝试着 用过滤实现一个 当程序发生错误的时候,执行另一个方法的功能,类似Policy的重试策略或降级。
下面代码:
编写:一个过滤器类:
在控制器中使用:
当方法执行出错的时候执行另一个方法:
如下:注意参数一致:
执行结果:
返回结果:
这个时候我们能看到过滤器先抓取了错误信息,Policy 就抓不到了,但同样实现了降级的功能。
如果我们不使用Aop的话 直接在控制器中写
比如:这样写一个两个还行多了的话,代码就相当的乱了。
以上代码虽然没有实现policy ,但是也演示出了大致使用Aop实现 Policy的过程原理。
使用AspectCore 实现Policy
这里贴出一份杨中科老师 在普及AspNetCore微服务课程中的代码:支持原创,
完整的代码这里贴出过:
http://www.cnblogs.com/qhbm/p/9228238.html
使用Dora.Interception 实现Policy
我在Demo中进行了简单的实现:这里就不贴出了,因为框架还不是很完善,我问了作者老A,要等到下一版出来后用在项目中才比较稳妥。大家可以关注一下老A博客。
截图说明一下两个框架的区别,到时候可根据框架需要酌情使用:
原文地址:https://www.cnblogs.com/szlblog/p/9425164.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com