生命週期

芝士Hugh發表於2024-06-21

生命週期有三種模式:瞬時(Transient)、作用域(Scoped)、單例(Singleton)

「瞬時,就是沒有生存期。」

也就是說,每次從依賴注入系統中獲取瞬時的服務例項時,都會建立一個全新的物件。

依賴注入系統中的服務容器不會儲存它,也就是沒有生存權的普通物件。

「單例,就是會一直存在,與應用同壽。」

也就是說,第一次從依賴注入系統中獲取單例的服務例項時,才會建立一個全新的物件。

依賴注入系統中的服務容器會儲存它,之後的每次使用都是直接從容器中獲取它,也就是高貴的單例物件。

「作用域,理解起來沒有那麼直觀,需要結合場景來說明。」

比如,在 ASP.NET 的應用中,每一個來自外部的請求,都可以理解為是一個請求作用域。不同的請求,就是不同的請求作用域。

在同一個請求作用域中,獲取作用域模式的服務例項與單例模式的服務例項,具有同樣的表現。

也就是說,第一次從依賴注入系統中獲取服務例項時,才會建立一個全新的物件。

依賴注入系統會在服務容器中為該作用域開個單間,單獨儲存該物件。

當請求結束時,請求作用域會被銷燬,單間自然也就沒了,其中儲存的物件也會隨之銷燬。

所以,在這種模式中生存的物件例項,都只作用於自己的域範圍,不同的域不會互相干涉。

由此可見,服務一旦有了生命週期,那麼依賴注入系統就可以根據需求,來儲存和管理它們的例項。

學習連結:https://www.dongchuanmin.com/net/2009.html

相關文章