日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 带你学习AOP框架之Aspect.Core[1] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 在軟件業,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟件開發中的一個熱點,是函數式編程的一種衍生范型。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。

  在.NET Core中比較好的AOP框架有一個叫做Aspect的這樣的一個框架, 它是一個國產的!如何引入AspectCore??可以直接nuget。

這AspectCore中需要創建一個攔截器一般繼承自 AbstractInterceptorAttribute。并且實現它的 Invoke 方法 。

其中第一個參數是上下文,next是執行的委托方法,通過這個委托可以執行被攔截的方法。

首先我們可以創建一個需要被代理攔截的類(必須是public方法是虛方法且被標記,也必須使用MVC中的Filter命名規范)。這個方法也可以是異步的!

如何進行代理? 需要通過ProxyGeneratorBuilder 來代理對象,注意 p 指向的對象是 AspectCore 生成的 Person 的動態子類的對象,直接 new Person是無法被攔截的。

?上面說到我們不可以直接new這個person,那現在我們調試一下,一探究竟!!!我們看看這個p是個什么類型。

噫?為什么這個p不是AspectPollyIdn.Person?而是AspectCore.DynamicGenerated.Person?不妨把這個p的父類給打印出來,來瞅瞅。

現在的對象是我們了,也就是它的父類,那這個時候你就絕對要明白了,為什么我們的被代理類是虛方法,也就是說它用子類類重寫了我們被代理類的虛方法,也就實現了AOP,那么呢這也就是Aspect.Core的原理。大概簡單的就是這樣。

現在你已經了解了AspectCore的原理了,但回頭發現每次來創建這些對象都非常繁瑣,我們只想去使用AspectCore通過CreateClassProxy()來創建我們想要的代理對象,那么現在我們可以使用AspNetCore的依賴注入解決這個問題。

?首先呢,我們引用AspectCore.Extensions.DependencyInjection,這是AspectCore給我們的一個DI框架。再把Startup中的ConfigureServices進行改造。

隨便創建一個類 繼承與AbstractInterceptorAttribute ,重寫方法,再添加一個Person。

在API中重載進行依賴注入。下面我們進行postman進行測試,因為已經關閉了瀏覽器瀏覽。

?OK,成功。

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


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com


總結

以上是生活随笔為你收集整理的带你学习AOP框架之Aspect.Core[1]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。