參考資料:
https://www.yoyomooc.com/yoyomooc/aspnet-core-for-beginners-Dependency-Injection
https://www.yoyomooc.com/yoyomooc/44.AddSingletonvsAddScopedvsAddTransient
AddSingleton()
文檔中:
AddSingleton()方法創建一個Singleton服務。首次請求時會創建Singleton服務。然后,所有后續請求都使用相同的實例。因此,通常,每個應用程序只創建一次Singleton服務,並且在整個應用程序生命周期中使用該單個實例。
個人理解:每個項目跑起來之后,一旦生命周期為Singleton的服務被創建出來,就一直使用這一個,直到項目被停止運行或者刪除,這個服務就被銷毀。
AddTransient()
文檔中:
AddTransient() 方法可以稱作:暫時性模式,會創建一個 Transient 服務。每次請求時,都會創建一個新的 Transient 服務實例。
個人理解:用戶的每一個HTTP請求,使用到了一個生命周期為Transient的服務,這個服務就被創建一次,使用完成后銷毀。
AddScoped()
文檔中:
AddScoped()方法創建一個 Scoped 服務。在范圍內的每個請求中創建一個新的 Scoped 服務實例。例如,在 Web 應用程序中,它為每個 http 請求創建 1 個實例,但在同一 Web 請求中的其他調用中使用相同的實例,在一個客戶端請求中是相同的,但在多個客戶端請求中是不同的。
個人理解:客戶端A使用該軟件時,使用生命周期為Scoped的服務,只創建一次,客戶端A結束Web訪問后被銷毀。客戶端A與客戶端B同時使用該服務時,是創建的兩個服務,並不共用一個。
因為我的開發經驗很少,對這幾種生命周期基本沒有自己的理解,如果我理解錯了,希望朋友們可以在評論區中提醒我,謝謝大家。后續我有更正確的理解或者更詳細的理解,會補充在博客中。