ASP.NET Core具有一個(gè)以ServiceCollection和ServiceProvider為核心的依賴注入框架,雖然這只是一個(gè)很輕量級(jí)的框架,但是在大部分情況下能夠滿足我們的需要。不過我覺得它最缺乏的是針對(duì)AOP的支持,雖然這個(gè)依賴注入框架提供了擴(kuò)展點(diǎn)使我們可以很容易地實(shí)現(xiàn)與第三方框架的集成,但是我又不想“節(jié)外生枝”,為此我們趁這個(gè)周末寫了一個(gè)簡單的Interception框架來解決這個(gè)問題。通過這個(gè)命名為Dora.Interception的框架,我們可以采用一種非常簡單、直接而優(yōu)雅地(呵呵)在這個(gè)原生的DI框架上實(shí)現(xiàn)針對(duì)AOP的編程。目前這只是一個(gè)Beta(Beta1)版本,我將它放到了github上(https://github.com/jiangjinnan/Dora)。我寫這篇文章不是為了說明這個(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ì)象。不過在目標(biāo)對(duì)象最終被調(diào)用的時(shí)候,注冊(cè)的Interceptor會(huì)按照順序被先后執(zhí)行。
二、安裝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
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26