ASP.NET Core具有一個(gè)以ServiceCollection和ServiceProvider為核心的依賴注入框架,雖然這只是一個(gè)很輕量級(jí)的框架,但是在大部分情況下能夠滿足我們的需要。不過(guò)我覺(jué)得它最缺乏的是針對(duì)AOP的支持,雖然這個(gè)依賴注入框架提供了擴(kuò)展點(diǎn)使我們可以很容易地實(shí)現(xiàn)與第三方框架的集成,但是我又不想“節(jié)外生枝”,為此我們趁這個(gè)周末寫(xiě)了一個(gè)簡(jiǎn)單的Interception框架來(lái)解決這個(gè)問(wèn)題。通過(guò)這個(gè)命名為Dora.Interception的框架,我們可以采用一種非常簡(jiǎn)單、直接而優(yōu)雅地(呵呵)在這個(gè)原生的DI框架上實(shí)現(xiàn)針對(duì)AOP的編程。目前這只是一個(gè)Beta(Beta1)版本,我將它放到了github上(https://github.com/jiangjinnan/Dora)。我寫(xiě)這篇文章不是為了說(shuō)明這個(gè)Dora.Interception的設(shè)計(jì)和實(shí)現(xiàn)原理,而是為了介紹如何利用它在一個(gè)ASP.NET Core與原生的DI框架結(jié)合實(shí)現(xiàn)AOP的編程模式。兩個(gè)實(shí)例可以從這里下載。

目錄
一、基本原理
二、安裝NuGet包
三、定義Interceptor
四、定義InterceptorAttribute
五、以DI的方式注入代理
六、如果你不喜歡IInterceptable<T>接口

一、基本原理

和大部分針AOP/Interception的實(shí)現(xiàn)一樣,我們同樣采用“代理”的方式實(shí)現(xiàn)對(duì)方法調(diào)用的攔截和注入。如下圖所示,我們將需要以AOP方法注入的操作定義成一個(gè)個(gè)的Interceptor,并以某種方式(我采用的是最為直接的標(biāo)注Attribute的形式)應(yīng)用到某個(gè)類型或者方法上。在運(yùn)行的時(shí)候我們?yōu)槟繕?biāo)對(duì)象創(chuàng)建一個(gè)代理,我們針對(duì)代理對(duì)象的調(diào)用將會(huì)自動(dòng)傳遞到目標(biāo)對(duì)象。不過(guò)在目標(biāo)對(duì)象最終被調(diào)用的時(shí)候,注冊(cè)的Interceptor會(huì)按照順序被先后執(zhí)行。

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

二、安裝NuGet包

這個(gè)框架目前涉及到如下兩個(gè)框架,基礎(chǔ)的模型實(shí)現(xiàn)在Dora.Interception這個(gè)包中,Dora.Interception.Castle則利用Castle.DynamicProxy針對(duì)代理的創(chuàng)建提供了一個(gè)默認(rèn)實(shí)現(xiàn)。

  • Dora.Interception

  • Dora.Interception.Castle

網(wǎng)友評(píng)論