.Net Core依賴注入IOC和DI介紹
阿新 • • 發佈:2022-01-13
名詞解釋
說起依賴注入,很多人會想起兩個詞:IOC和DI。
- IOC(Inversion of Control)=控制反轉
- DI(Dependency Injection)=依賴注入
IOC其實並不是某項具體的實現技術,它是一種思路(或者是設計理念),這一點很多有經驗的同學都會搞混。如果用白話來講,IOC就意味著把物件交給IOC容器控制,而不是在物件內部控制。簡而言之就是“容器控制物件”。
套入到程式來說,我們有兩個class,A、B,如果B要用到A的方法,傳統的方法是在B中新增A的引用(比如new),這種就算是“正轉”,但如果我們把這個過程IOC容器去控制,那就是“反轉”。IOC也不能為程式帶來更多功能,其主要目的是為了提升重用率、增強擴充套件性、降低耦合性、增強對程式設計的理解。
DI是什麼呢?可以把它理解為IOC的另一種解釋方式。可能是IOC的概念聽起來的確雲裡霧裡,所以有位大佬(Martin Fowler)給出了一個新的名詞DI,明確指出“被注入物件依賴IoC容器配置依賴物件”,從另一個角度解釋了IOC的理念。
net core的實現
net core自帶ioc容器,如果你想把某個物件交給ioc容器來控制,最簡單的使用方法就是在你的startup.cs中新增程式碼,如下:
public void ConfigureServices(IServiceCollection services) { services.AddScoped<XXX>(); services.Awww.cppcns.comddTransient<XXX>(); services.AddSingleton<XXX>(); }
在這個階段,需要注意交給ioc容器控制的物件有三種宣告週期可以選擇:
- (單例模式)Singleton:首次請求建立,之後所有請求都沿用這個已建立的服務。
- (瞬態模式)Transient:每次請求都建立,上面的程式碼裡就是這種模式。
- (作用域模式)Scoped:每次請求建立,同一個請求內http://www.cppcns.com不管呼叫多少次都只會被建立一次。
如果需要使用被注入的物件,只需要在建構函式中新增被注入型別的物件即可,如下:
private readonly XXX _x; public XController(XXX x) {_x = x; }
當有多個物件時如法炮製。
到此這篇關於.Net Core依賴注入IOC和DI介紹的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援我們。