带你学习AOP框架之Aspect.Core[1]

 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

  在.NET Core中比较好的AOP框架有一个叫做Aspect的这样的一个框架, 它是一个国产的!如何引入AspectCore? 可以直接nuget。

640?wx_fmt=png

这AspectCore中需要创建一个拦截器一般继承自 AbstractInterceptorAttribute。并且实现它的 Invoke 方法 。

其中第一个参数是上下文,next是执行的委托方法,通过这个委托可以执行被拦截的方法。

640?wx_fmt=png

首先我们可以创建一个需要被代理拦截的类(必须是public方法是虚方法且被标记,也必须使用MVC中的Filter命名规范)。这个方法也可以是异步的!

640?wx_fmt=png

如何进行代理? 需要通过ProxyGeneratorBuilder 来代理对象,注意 p 指向的对象是 AspectCore 生成的 Person 的动态子类的对象,直接 new Person是无法被拦截的。

640?wx_fmt=png

640?wx_fmt=png

 上面说到我们不可以直接new这个person,那现在我们调试一下,一探究竟!!!我们看看这个p是个什么类型。

640?wx_fmt=png

噫?为什么这个p不是AspectPollyIdn.Person?而是AspectCore.DynamicGenerated.Person?不妨把这个p的父类给打印出来,来瞅瞅。

640?wx_fmt=png

现在的对象是我们了,也就是它的父类,那这个时候你就绝对要明白了,为什么我们的被代理类是虚方法,也就是说它用子类类重写了我们被代理类的虚方法,也就实现了AOP,那么呢这也就是Aspect.Core的原理。大概简单的就是这样。

640?wx_fmt=png

现在你已经了解了AspectCore的原理了,但回头发现每次来创建这些对象都非常繁琐,我们只想去使用AspectCore通过CreateClassProxy()来创建我们想要的代理对象,那么现在我们可以使用AspNetCore的依赖注入解决这个问题。

640?wx_fmt=png

 首先呢,我们引用AspectCore.Extensions.DependencyInjection,这是AspectCore给我们的一个DI框架。再把Startup中的ConfigureServices进行改造。

640?wx_fmt=png

随便创建一个类 继承与AbstractInterceptorAttribute ,重写方法,再添加一个Person。

640?wx_fmt=png

在API中重载进行依赖注入。下面我们进行postman进行测试,因为已经关闭了浏览器浏览。

640?wx_fmt=png

 OK,成功。

640?wx_fmt=png

原文地址:https://www.cnblogs.com/ZaraNet/p/10308706.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P7735-[NOI2021]轻重边【树链剖分,线段树】

前言 之前线上赛就A的题现在才写博客 正题 题目链接:https://www.luogu.com.cn/problem/P7735 题目大意 有nnn个点的一棵树,开始所有边都是轻边,mmm次操作。 把x→yx\rightarrow yx→y路径上所有点连接的重边都变为轻边,然后再把路径上的…

.NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现

前面为了方便我们只是简单实现了基本业务功能的增删改查,但是登录功能还没有实现,而登录又是系统所必须的,得益于 ASP.NET Core的可扩展性因此我们很容易实现我们的登录功能。今天我将带着大家一起来实现下我们的ASP.NET Core2.2开发的CMS系统…

张高兴的 .NET Core IoT 入门指南:环境配置、Blink、部署

如何在 Raspberry Pi 的 Raspbian 上构建使用 GPIO 引脚的 IoT 程序?你可能会回答使用 C 或 Python 去访问 Raspberry Pi 的引脚。现在,C# 程序员可以使用 .NET Core 在 Raspbian(Linux) 上构建 IoT 应用程序。只需要引入 System.Device.GPIONuGet 包即可…

在AspNetMvc中使用日志面板. Logdashboard 1.1beta

Logdashboard是Net下的日志面板,它支持AspNet与AspNetCore项目。关于更多LogDashboard的介绍请看这里--使用logdashboard查看可视化日志。就在刚刚LogDashboard发布了1.1的beta版,在这个版本中有以下变化https://github.com/liangshiw/LogDashboard/releases支持NetFramework的…

【正睿2021寒假省选第二轮集训 day 1】令牌生成 (组合数+二分)

description solution 打表yyds 其实符合条件的个数跟nnn(非题目中的意思)有着等差数列公式的千丝万缕关系 所以可以二分出具体值 最后答案的取值范围一定是长成[,)[,)[,),左闭右开的形式的 而且两个边界一定是只差了最小的那个111&#xff…

CF464E-The Classic Problem【最短路,主席树】

正题 题目链接:https://www.luogu.com.cn/problem/CF464E 题目大意 nnn个点mmm条边的一张无向图,第iii条边长度为2xi2^{x_i}2xi​,求sss到ttt的最短路。 1≤n≤105,0≤m,xi≤1051\leq n\leq 10^5,0\leq m,x_i\leq 10^51≤n≤105,0≤m,xi​≤105 解题思路…

.NETStandard FreeSql v0.0.9 功能预览

年关将至,首页技术含量文章真是越来越少,理解大家盼着放假过年,哥们我何尝不是,先给大家拜个早年。兄弟我从11月底发了神经,开启了 ORM 功能库的开发之旅,历时两个月编码和文档整理,目前预览版本…

第十二届蓝桥杯C++赛后感

文章目录A 空间卡片直线货物摆放路径时间显示G砝码称重H杨辉三角形双向排列J括号序列注:有些代码忘了考试时怎么写的了,(我也懒得重新写),所以很多题的代码是acwing蓝桥杯讲解里的,我对其进行注释和修改A 空…

SeaweedFS在.net core下的实践方案

一直对分布式的文件储存系统很感兴趣,最开始关注淘宝的TFS(Taobao File System),好像搁浅了,官方地址无法访问,github上面,各种编译问题,无意间发现了SeaweedFS链接seaweedfs测试了一…

[C++ STL algorithm] lower_bound、upper_bound、unique的本质

lower_bound&#xff1a;返回第一个大于等于查找值的地址upper_bound&#xff1a;返回第一个严格大于查找值的地址 使用这两个函数需要的头文件 #include <algorithm> using namespace std;要求数组必须是有序/单调的 lower_bound lower_bound( a 1, a n 1, x );意…

蓝桥杯 I.双向排序

题目链接 题解&#xff1a; 比赛时就直接写了一个暴力sort交上&#xff0c;能骗一点分是一点 昨晚看了acwing的讲解&#xff0c;现在结合我的思路更新正解 题目中设计两个操作&#xff0c;一个是选定前x个数&#xff0c;使其降序&#xff0c;另一个是选定后y个数&#xff0c…

微软收购Citus Data | 再次肯定对开源的承诺,并加速了Azure PostgreSQL的性能和扩展...

作者&#xff1a;Rohan Kumar 翻译&#xff1a;周宝峰 从左到右&#xff1a;微软开源关系数据库总经理Sudhakar Sannakkayala&#xff0c;Citus Data首席技术官兼联合创始人Ozgun Erdogan&#xff0c;Citus Data首席执行官兼联合创始人Umur Cubukcu&#xff0c;Citus Data工…

Docker最全教程——MongoDB容器化(十三)

上一节我们讲述了数据库容器化之持久保存数据&#xff0c;本节将讲诉MongoDB容器化实践&#xff0c;并且接下来将逐步讲解其他数据库&#xff08;MySql、Redis等等&#xff09;的容器化实践&#xff0c;然后将讲诉一些分布式架构的项目实践。由于实践需要花费大量的时间&#x…

在.NET Core中使用Exceptionless分布式日志收集框架

一.Exceptionless简介Exceptionless 是一个开源的实时的日志收集框架&#xff0c;它可以应用在基于 ASP.NET&#xff0c;ASP.NET Core&#xff0c;Web Api&#xff0c;Web Forms&#xff0c;WPF&#xff0c;Console&#xff0c;MVC 等技术栈的应用程序中&#xff0c;并且提供了…

test1 3-15 模拟赛1

文章目录考试复盘matrixsetstring考试复盘 首先先说T1T1T1&#xff0c;嗯&#xff0c;发现了列是相互独立的&#xff0c;所以分开考虑了 但是实在没想到线性基&#xff0c;就顺着自己的思路硬搞了505050跑路 老实说&#xff0c;505050分的部分分写得都是迷迷糊糊的&#xff0c;…

华为云提供针对Nuget包管理器的缓存加速服务测试

在Visual Studio 2013、2015、2017中&#xff0c;使用的是Nuget包管理器对第三方组件进行管理升级的。而且 Nuget 是我们使用.NET Core的一项基础设施&#xff0c;.NET的软件包管理器NuGet.org是一项面向全球用户搭建的服务&#xff0c;不论用户身在何处&#xff0c;NuGet.org都…

test2 3-16 2021 模拟赛two

文章目录考试复盘染色问题芬威克树礼物考试复盘 先说T1T1T1 染色&#xff0c;以为是道数学题&#xff0c;推了有一会儿的公式&#xff0c;从颜色1到颜色m&#xff0c;感觉是dpdpdp转移 发现颜色重叠的方案可以转化为另外一种相邻不重叠的染色 但是推到颜色4的时候就发现自己…

ASP.NET Core 2.2 : 扒一扒新的Endpoint路由方案

ASP.NET Core 从2.2版本开始&#xff0c;采用了一个新的名为Endpoint的路由方案&#xff0c;与原来的方案在使用上差别不大&#xff0c;但从内部运行方式上来说&#xff0c;差别还是很大的。上一篇ASP.NET Core;图解路由(2.1 earler)详细介绍了原版路由方案的运行机制&#xff…

开源中国 2018 新增开源软件最受欢迎 TOP 50

本周开源中国陆续公布了两个年度榜单&#xff0c;分别是国产新秀榜 TOP 30 和国产新增榜 TOP 50。由于两个榜单的数据来源都是国内开源项目&#xff0c;所以会有部分项目同时出现在两个榜单上。今天公布的这份榜单 —— 开源中国 2018 新增开源软件最受欢迎 TOP 50&#xff0c;…

[树链剖分]List wants to travel,Relief grain,hotel加强版,This world need more Zhu

文章目录B&#xff1a;Relief grainC&#xff1a;hotel加强版B&#xff1a;Relief grain 题目 将一段区间修改的标记变成差分&#xff0c;每次都是连续一段的dfndfndfn序修改 从小到大枚举dfndfndfn&#xff0c;在一段标记的最开头的dfndfndfn插入&#xff0c;最末尾的dfndf…