您现在的位置是:首页 > 文章详情

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

日期:2018-06-25点击:466

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微服务第二版课件整理出来的

现在的努力只是为了更好的将来,将来你一定不会后悔你现在的努力。一起加油吧!!!
C#/.NetCore技术交流群:608188505  欢迎加群交流
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力!
原文链接:https://yq.aliyun.com/articles/610925
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章