.net core番外第2篇:Autofac的3種依賴注入方式(構造函數注入、屬性注入和方法注入),以及在過濾器裡面實現依賴注入
本篇文章接前一篇,建議可以先看前篇文章,再看本文,會有更好的效果。
前一篇跳轉鏈接://www.cnblogs.com/weskynet/p/15046999.html
正文:
Autofac通過構造函數注入
如前一篇所示,獲取實例都是通過構造函數進行。此處通過構造函數獲取實例,還有一種通過構造函數傳入IServiceProvider進行獲取。該方法可以極大減少構造函數傳入的實例過多所導致的構造函數參數臃腫。示例直接使用前篇項目做拓展,在控制器的測試api下面,直接使用。有關示例如下圖所示:
設置斷點,並運行程式查看效果。可見IWeskyTest介面已經被注入進來,並且可以訪問到
Autofac通過屬性注入方式
在ServiceA實現類裡面,添加IServiceB、IServiceC的屬性。並且在ServiceA實現類裡面,添加一個測試方法 Hey(),在裡面對以上兩個屬性所對應的介面方法進行調用。程式碼如下:
以及Hey需要加入到抽象類介面IServiceA:
對IServiceA\B\C進行服務註冊。其中,提供屬性的服務,註冊時候必須使用PropertiesAutowired方式,如下面程式碼所示:
接著改寫控制器裡面的Test方法進行測試。對應程式碼以及解釋和對應的運行結果如下圖所示:
Autofac通過方法注入方式
改寫上面ServiceA的類為如下程式碼。有關程式碼說明如圖:
對用到的IServiceA和B進行服務註冊。如圖所示,ServiceA裡面提供了方法注入,所以需要在註冊A服務的時候,使用OnActivated方法。其中,RegisterService是ServiceA服務裡面提供的需要當做方法注入的方法,方法裡面的IServiceB是需要被方法注入的抽象類(介面)。以下使用了瞬時,也可以使用其他的,沒有限制,包括ServiceB服務註冊時候,也可以使用非單例模式,不做限制。
運行程式,如果先後列印ServiceA 和 ServiceB,則代表方法注入成功。運行程式結果如下:
Filter過濾器裡面實現支援依賴注入
先編寫一個過濾器WeskyFilter,繼承自 ActionFilterAttribute。並且在裡面添加一個屬性注入的IServiceC和一個構造函數注入的IServiceD。
然後在OnActionExecuting和OnActionExecuted方法下面實現一個列印的內容,並且分別列印ServiceC實例和ServiceD實例下面的Hello方法。程式碼如下:
對IServiceC、D進行服務註冊,以及註冊WeskyFilter過濾器,用以支援依賴注入:
在控制器裡面的Test方法上面,添加過濾器標記,並直接運行進行結果驗證:
如圖所示,列印出過濾器裡面的內容,並且成功訪問到了ServiceC和D的Hello方法,代表在過濾器裡面實現依賴注入也是可以的。
以上就是本篇文章的全部內容,謝謝觀看。