带你学习AOP框架之Aspect.Core[1]
在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)。AOP是OOP的延續(xù),是軟件開發(fā)中的一個熱點,是函數(shù)式編程的一種衍生范型。利用AOP可以對業(yè)務(wù)邏輯的各個部分進行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。
在.NET Core中比較好的AOP框架有一個叫做Aspect的這樣的一個框架, 它是一個國產(chǎn)的!如何引入AspectCore??可以直接nuget。
這AspectCore中需要創(chuàng)建一個攔截器一般繼承自 AbstractInterceptorAttribute。并且實現(xiàn)它的 Invoke 方法 。
其中第一個參數(shù)是上下文,next是執(zhí)行的委托方法,通過這個委托可以執(zhí)行被攔截的方法。
首先我們可以創(chuàng)建一個需要被代理攔截的類(必須是public方法是虛方法且被標記,也必須使用MVC中的Filter命名規(guī)范)。這個方法也可以是異步的!
如何進行代理? 需要通過ProxyGeneratorBuilder 來代理對象,注意 p 指向的對象是 AspectCore 生成的 Person 的動態(tài)子類的對象,直接 new Person是無法被攔截的。
?上面說到我們不可以直接new這個person,那現(xiàn)在我們調(diào)試一下,一探究竟!!!我們看看這個p是個什么類型。
噫?為什么這個p不是AspectPollyIdn.Person?而是AspectCore.DynamicGenerated.Person?不妨把這個p的父類給打印出來,來瞅瞅。
現(xiàn)在的對象是我們了,也就是它的父類,那這個時候你就絕對要明白了,為什么我們的被代理類是虛方法,也就是說它用子類類重寫了我們被代理類的虛方法,也就實現(xiàn)了AOP,那么呢這也就是Aspect.Core的原理。大概簡單的就是這樣。
現(xiàn)在你已經(jīng)了解了AspectCore的原理了,但回頭發(fā)現(xiàn)每次來創(chuàng)建這些對象都非常繁瑣,我們只想去使用AspectCore通過CreateClassProxy()來創(chuàng)建我們想要的代理對象,那么現(xiàn)在我們可以使用AspNetCore的依賴注入解決這個問題。
?首先呢,我們引用AspectCore.Extensions.DependencyInjection,這是AspectCore給我們的一個DI框架。再把Startup中的ConfigureServices進行改造。
隨便創(chuàng)建一個類 繼承與AbstractInterceptorAttribute ,重寫方法,再添加一個Person。
在API中重載進行依賴注入。下面我們進行postman進行測試,因為已經(jīng)關(guān)閉了瀏覽器瀏覽。
?OK,成功。
原文地址:https://www.cnblogs.com/ZaraNet/p/10308706.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的带你学习AOP框架之Aspect.Core[1]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019年1月已到,Java 8 要收费
- 下一篇: .NET Core实战项目之CMS 第十