1. Dotnet9首页
  2. .NET
  3. .NET相关

FluentAspects — 基于 Fluent API 的 Aop

Intro

上次我们做了一个简单的 AOP 实现示例,但是实现起来主要是基于 Attribute 来做的,对于代码的侵入性太强,于是尝试实现基于 Fluent API 的方式来做 AOP 。

抽象 InterceptorResolver

原来获取方法执行的 Interceptor 是通过 Attribute 来获取的,现在我们只需要将获取 Interceptor 的逻辑抽象出来就可以实现不必依赖于 Attribute

方法执行上下文定义:

FluentAspects -- 基于 Fluent API 的 Aop

方法拦截器 Interceptor 接口定义:

FluentAspects -- 基于 Fluent API 的 Aop

自定义 Interceptor 只需要继承这个接口实现相应的逻辑就好了

获取 IInterceptorResolver 接口定义:

FluentAspects -- 基于 Fluent API 的 Aop

原来基于 Attribute 获取 Interceptor 的方式可以实现一个 AttributeInterceptorResolver

想要基于 Fluent API 来获取 Interceptor ,只需要实现基于 Fluent API 的 InterceptorResolver 就可以了,具体的实现可以参考 FluentConfigInterceptorResolver

示例预览

测试服务定义:

FluentAspects -- 基于 Fluent API 的 Aop

测试 Interceptor

FluentAspects -- 基于 Fluent API 的 Aop

测试代码:

FluentAspects -- 基于 Fluent API 的 Aop

输出结果预览:

FluentAspects -- 基于 Fluent API 的 Aop

More

最近十几天的时间一直在搞这个,相比之前写的示例,真正实现一个完整的 AOP 框架还是要做比较多的事情的,之前的 AOP 示例,没有考虑泛型,也没有什么设计,所以前面的示例只能算是一个小玩具。

在实现的过程中,参考了很多 AspectCore 的代码,有一些代码甚至是直接从 AspectCore 里抄过来的。

推荐大家有机会研究学习一下柠檬大佬的 AspectCore 的源码,这个 AOP 框架的代码组织,代码细节都挺不错的。

AspectCore 源码地址:https://github.com/dotnetcore/AspectCore-Framework

Reference

原文出处:微信公众号【 WeihanLi amazingdotnet】

原文链接:https://mp.weixin.qq.com/s/DKIMKAX8haJc0caygWy1dg

本文观点不代表Dotnet9立场,转载请联系原作者。

发表评论

登录后才能评论