前言  

说起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

AspNetCore 基于AOP实现Polly的使用相关推荐

  1. 从壹开始前后端分离 40 || 完美基于AOP的接口性能分析

    旁白音:本文是不定时更新的.net core,当前主线任务的Nuxt+VueAdmin教程的 nuxt.js 之 tibug项目已上线,大家可以玩一玩:http://123.206.33.109:70 ...

  2. spring手动控制事务开启_Spring 基于AOP的事务控制

    What 事务是我们在进行数据操作的时候,要操作的事情,是一个完整的单元,不可再分的.它包括几个特性:原子性.一致性.可见性.隔离性: How 在Spring容器中,事务是被封装到事务管理器中,Spr ...

  3. 粗略的看JFinal的基于AOP的拦截器的实现

    2019独角兽企业重金招聘Python工程师标准>>> 简单的说一下AOP的实现,所谓AOP,即(Aspect Oriented Programming)的缩写,体现在程序中就是你可 ...

  4. 转:基于AOP实现Ibatis的缓存配置过期策略

    一.上篇回顾 自从上次<网站性能优化之应用程序缓存-中篇>得到不少园友的支持和鼓励,并且提出了不错的思路来实现我们中篇中提到的缓存策略,那么我将会结合.NET 本身内置 的AOP的方式来跟 ...

  5. 【日志记录】基于AOP实现自定义日志注解,并支持动态设置注解内容

    前言 平时在java项目开发过程中,涉及到记录操作日志的场景很多,有时候大家习惯把操作日志的生成代码写到业务代码中,这样造成了日志和业务代码的耦合性比较高.可维护性也不强,易读性更差,更多的时候是使用 ...

  6. SpringBoot基于AOP实现自定义非空验证的注解

    为了避免对大量参数进行过多的非空校验,我们可以自定义一个非空验证的注解,因为spring自带的@RequestParam并不能对参数进行非空 准备工作 首先需要创建一个spring boot项目,并引 ...

  7. 基于AOP的事务管理与普通事务管理有什么区别?

    为什么80%的码农都做不了架构师?>>>    (一) 用编程的方法来实现,我觉得这种方法比较灵活,控制起来比较方便,但是需要写一些额外的代码 <!--定义Bean--> ...

  8. Spring Boot——基于AOP的HTTP操作日志解决方案

    解决方案 package com.hailiu.web.aop;import com.fasterxml.jackson.databind.ObjectMapper; import com.haili ...

  9. Spring 中基于 AOP 的 XML操作方式

    Spring 框架的一个关键组件是面向方面的编程(AOP)框架.面向方面的编程需要把程序逻辑分解成不同的部分称为所谓的关注点.跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于 ...

最新文章

  1. vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码
  2. 很抱歉,这场大会我们没法卖票给你了
  3. Redis 宝典 | 基础、高级特性与性能调优
  4. Firefox 4网页演示:宣布Web O’Wonder的奇迹
  5. boost::gil::is_homogeneous用法的测试程序
  6. 【Nutch2.2.1基础教程之6】Nutch2.2.1抓取流程
  7. OpenJdk7编译
  8. C++PrimerCH1
  9. Modbus协议栈应用实例之四:ModbusTCP服务器应用
  10. C语言 #pragma once - C语言零基础入门教程
  11. 解码(五):sws_getContext和sws_scale像素格式和尺寸转换函数详解
  12. python之MRO和垃圾回收机制
  13. html5旋转木马效果,js实现旋转木马效果
  14. 机器学习之网格搜索(GridSearch)及参数说明,实例演示
  15. 均值滤波(matlab)
  16. BeX5创建w文件窗口显示不齐
  17. JavaFX屏幕截图工具ScreenCapture
  18. 笔记本计算机bios设置,小技巧:关于笔记本BIOS设置的三招
  19. LTE信令流程——位置更新
  20. 透明度百分和六进制对比表

热门文章

  1. php异常处理的深入
  2. ISE14.7兼容性问题集锦
  3. 10.29 工作笔记 ndk编译C++,提示找不到头文件(ndk-build error: string: No such file or directory)...
  4. 添加CSS的四种方式
  5. PHP访问连接MYSQL数据库
  6. Avalonia跨平台入门第十一篇之自定义Window
  7. RowVersion字段从SqlServer到PostgreSQL的迁移
  8. ASP.NET Core自定义响应内容
  9. C# 虚方法与抽象方法区别
  10. 你也可以搞懂的微服务第一篇——来自ThoughtWork的学习体验