本篇文章接前一篇,建議可以先看前篇文章,再看本文,會有更好的效果。
前一篇跳轉連結:https://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方法,代表在過濾器裡面實現依賴注入也是可以的。
以上就是本篇文章的全部內容,謝謝觀看。