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