AspNetCore 基于AOP实现Polly的使用

 

前言  

说起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的重试策略或降级。

下面代码:

编写:一个过滤器类:

 

复制代码
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Reflection;   namespace InterceptorCoreLibrary {     [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)]     public class CoreExceptionFilter:Attribute, IExceptionFilter,IActionFilter     {         /// <summary>        /// 发生错误的时候重新执行的方法         /// </summary>        public string FallBackClass { get; set; }         /// <summary>        /// 发生错误的时候重新执行的方法         /// </summary>        public string FallBackMethod { get; set; }          /// <summary>        /// 获取方法的参数         /// </summary>        public object[] InvokeParameters { get; set; }          /// <summary>        /// 构造函数使用该类时参数为方法         /// </summary>        /// <param name="fallBackMethod"></param>        public CoreExceptionFilter(string fallBackClass, string fallBackMethod)          {             this.FallBackMethod = fallBackMethod;             
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信