服務存續期
註冊服務時,您必須選擇符合應用程式中服務使用方式的存留期。 存留期會影響服務插入到元件中時的行為。 到目前為止,您已使用 AddSingleton 方法註冊了服務。 此方法會註冊一個含單一存留期的服務。 ASP.NET Core 中的服務有三種內建的存留期:
- 單一
- 已限定範圍
- 暫時性
單一存留期
註冊含單一存留期的服務會在應用程式啟動時建立一次,並在應用程式的存留期內重複使用。 此存留期對於建立成本高昂或不經常變更的服務非常有用。 例如,從檔案中讀取組態設定的服務可以註冊為單一。
使用 AddSingleton 方法將單一服務新增至服務容器中。
有限範圍的存留期
註冊含有限範圍的存留期的服務會在每個設定的範圍中建立一次,而 ASP.NET Core 會為每個要求設定該範圍。 ASP.NET Core 中有限範圍的服務通常會在收到要求時建立,並在該要求完成時加以釋放。 此存留期對於存取要求特定的資料的服務很有用。 例如,從資料庫中擷取客戶資料的服務可以註冊為有限範圍的服務。
使用 AddScoped 方法將有限範圍的服務新增至服務容器中。
瞬時壽命
註冊含暫時性存留期的服務在其每次被要求時都會加以建立。 此存留期對於輕量型、無狀態的服務很有用。 例如,執行專門計算的服務可以註冊為暫時性服務。
使用 AddTransient 方法將暫時性服務新增至服務容器中。
相依於其他服務的服務
服務可以相依於其他服務,通常是透過其建構函式插入其相依性。 當您註冊一個相依於另一個服務的服務時,您必須將服務存留期納入考慮。 例如,單例服務不應該依賴於範圍服務,因為範圍服務會在請求完成後被釋放,但單例服務在應用程式的存續期間會一直存在。 幸運的是,ASP.NET Core 預設會檢查此錯誤的組態,並在應用程式啟動時報告範圍驗證錯誤,以便可以快速識別並解決問題。