.net core工具組件系列之Autofac—— 第二篇:Autofac的3種依賴注入方式(構造函數注入、屬性注入和方法注入),以及在過濾器里面實現依賴注入


 

本篇文章接前一篇,建議可以先看前篇文章,再看本文,會有更好的效果。

前一篇跳轉鏈接:https://www.cnblogs.com/weskynet/p/15046999.html

 

正文:

Autofac通過構造函數注入

如前一篇所示,獲取實例都是通過構造函數進行。此處通過構造函數獲取實例,還有一種通過構造函數傳入IServiceProvider進行獲取。該方法可以極大減少構造函數傳入的實例過多所導致的構造函數參數臃腫。示例直接使用前篇項目做拓展,在控制器的測試api下面,直接使用。有關示例如下圖所示:

 

 

設置斷點,並運行程序查看效果。可見IWeskyTest接口已經被注入進來,並且可以訪問到

 

 

Autofac通過屬性注入方式

ServiceA實現類里面,添加IServiceBIServiceC的屬性。並且在ServiceA實現類里面,添加一個測試方法 Hey(),在里面對以上兩個屬性所對應的接口方法進行調用。代碼如下:

 

 

以及Hey需要加入到抽象類接口IServiceA

 

 

IServiceA\B\C進行服務注冊。其中,提供屬性的服務,注冊時候必須使用PropertiesAutowired方式,如下面代碼所示:

 

 

接着改寫控制器里面的Test方法進行測試。對應代碼以及解釋和對應的運行結果如下圖所示:

 

 

Autofac通過方法注入方式

 

改寫上面ServiceA的類為如下代碼。有關代碼說明如圖:

 

 

對用到的IServiceAB進行服務注冊。如圖所示,ServiceA里面提供了方法注入,所以需要在注冊A服務的時候,使用OnActivated方法。其中,RegisterServiceServiceA服務里面提供的需要當做方法注入的方法,方法里面的IServiceB是需要被方法注入的抽象類(接口)。以下使用了瞬時,也可以使用其他的,沒有限制,包括ServiceB服務注冊時候,也可以使用非單例模式,不做限制。

 

 

運行程序,如果先后打印ServiceA 和 ServiceB,則代表方法注入成功。運行程序結果如下:

 

 

Filter過濾器里面實現支持依賴注入

 

先編寫一個過濾器WeskyFilter,繼承自 ActionFilterAttribute。並且在里面添加一個屬性注入的IServiceC和一個構造函數注入的IServiceD

然后在OnActionExecutingOnActionExecuted方法下面實現一個打印的內容,並且分別打印ServiceC實例和ServiceD實例下面的Hello方法。代碼如下:

 

 

IServiceCD進行服務注冊,以及注冊WeskyFilter過濾器,用以支持依賴注入:

 

 

在控制器里面的Test方法上面,添加過濾器標記,並直接運行進行結果驗證:

 

 

如圖所示,打印出過濾器里面的內容,並且成功訪問到了ServiceCDHello方法,代表在過濾器里面實現依賴注入也是可以的。

 

以上就是本篇文章的全部內容,謝謝觀看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM