分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

(6)ASP.NET CORE微服务 Micro-Service ---- AOP框架

发布时间:2023-09-06 02:01责任编辑:彭小芳关键词:.NET

AOP 框架基础

要求懂的知识:AOP、Filter、反射(Attribute)。

如果直接使用 Polly,那么就会造成业务代码中混杂大量的业务无关代码。我们使用 AOP (如果不了解 AOP,请自行参考网上资料)的方式封装一个简单的框架,模仿 Spring cloud 中的 Hystrix。

需要先引入一个支持.Net Core 的 AOP,我们用.Net Core 下的 AOP 框架是AspectCore(国产,动态织入),其他要不就是不支持.Net Core,要不就是不支持对异步方法进行拦截 MVC Filter。

GitHub:https://github.com/dotnetcore/AspectCore-Framework

Install-Package AspectCore.Core -Version 0.5.0

这里只介绍和我们相关的用法:

1、编写拦截器CustomInterceptorAttribute 一般继承自AbstractInterceptorAttribute

public class CustomInterceptorAttribute:AbstractInterceptorAttribute{ ??//每个被拦截的方法中执行  public async override Task Invoke(AspectContext context, AspectDelegate next)  { ???????
    try    {      Console.WriteLine("执行之前"); ?????????????????????
      await next(context);//执行被拦截的方法    }    catch (Exception)    {      Console.WriteLine("被拦截的方法出现异常"); ???????????????????????
      throw;    }    finally    {      Console.WriteLine("执行之后");    }  }}

2、编写需要被代理拦截的类

在要被拦截的方法上标注CustomInterceptorAttribute 。类需要是public类,方法如果需要拦截就是虚方法,支持异步方法,因为动态代理是动态生成被代理的类的动态子类实现的。

public class Person{ ???[CustomInterceptor] ?????????????public virtual void Say(string msg) ???{ ????????Console.WriteLine("service calling..."+msg); ???}}

3、通过AspectCore创建代理对象

ProxyGeneratorBuilder proxyGeneratorBuilder = new ProxyGeneratorBuilder(); using (IProxyGenerator proxyGenerator = proxyGeneratorBuilder.Build()){ ???Person p = proxyGenerator.CreateClassProxy<Person>(); ???p.Say("rupeng.com");}Console.ReadKey();

注意p指向的对象是AspectCore生成的Person的动态子类的对象,直接new Person是无法被拦截的。

研究AOP细节

拦截器中Invoke方法下的参数AspectContext的属性的含义:

Implementation  实际动态创建的Person子类的对象。

ImplementationMethod就是Person子类的Say方法

Parameters 方法的参数值。

Proxy==Implementation:当前场景下

ProxyMethod==ImplementationMethod:当前场景下

ReturnValue返回值

ServiceMethod是Person的Say方法

注:此文章是我看杨中科老师的.Net Core微服务第二版和.Net Core微服务第二版课件整理出来的

(6)ASP.NET CORE微服务 Micro-Service ---- AOP框架

原文地址:https://www.cnblogs.com/qhbm/p/9228238.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved