生命週期有三種模式:瞬時(Transient)、作用域(Scoped)、單例(Singleton)
「瞬時,就是沒有生存期。」
也就是說,每次從依賴注入系統中獲取瞬時的服務例項時,都會建立一個全新的物件。
依賴注入系統中的服務容器不會儲存它,也就是沒有生存權的普通物件。
「單例,就是會一直存在,與應用同壽。」
也就是說,第一次從依賴注入系統中獲取單例的服務例項時,才會建立一個全新的物件。
依賴注入系統中的服務容器會儲存它,之後的每次使用都是直接從容器中獲取它,也就是高貴的單例物件。
「作用域,理解起來沒有那麼直觀,需要結合場景來說明。」
比如,在 ASP.NET 的應用中,每一個來自外部的請求,都可以理解為是一個請求作用域。不同的請求,就是不同的請求作用域。
在同一個請求作用域中,獲取作用域模式的服務例項與單例模式的服務例項,具有同樣的表現。
也就是說,第一次從依賴注入系統中獲取服務例項時,才會建立一個全新的物件。
依賴注入系統會在服務容器中為該作用域開個單間,單獨儲存該物件。
當請求結束時,請求作用域會被銷燬,單間自然也就沒了,其中儲存的物件也會隨之銷燬。
所以,在這種模式中生存的物件例項,都只作用於自己的域範圍,不同的域不會互相干涉。
由此可見,服務一旦有了生命週期,那麼依賴注入系統就可以根據需求,來儲存和管理它們的例項。
學習連結:https://www.dongchuanmin.com/net/2009.html