當前位置: 妍妍網 > 碼農

ASP.NET Core 依賴註入生命周期

2024-02-18碼農

在ASP.NET Core中,依賴註入(DI)是一個核心概念,它允許開發者以解耦和可測試的方式構建應用程式。依賴註入容器負責管理應用程式中物件的生命周期,並根據需要註入依賴項。本文將深入探討ASP.NET Core中依賴註入的生命周期,包括三種主要的生命周期:瞬時(Transient)、作用域(Scoped)和單例(Singleton)。

1. 瞬時(Transient)生命周期

瞬時生命周期意味著每次從容器中解析服務時,都會建立一個新的服務例項。這意味著服務例項不是跨多個請求共享的,每次請求都會獲得一個全新的例項。

例如,下面的程式碼演示了如何將一個服務註冊為瞬時生命周期:

publicvoidConfigureServices(IServiceCollection services)
{
services.AddTransient<IMyService, MyService>();
}

在這種情況下,每次需要 IMyService 時,都會建立一個新的 MyService 例項。

2. 作用域(Scoped)生命周期

作用域生命周期意味著在同一個HTTP請求內,服務例項是共享的。也就是說,在同一個請求中,無論你從容器中解析多少次該服務,都會得到同一個例項。但是,不同的請求將得到不同的例項。

要將服務註冊為作用域生命周期,可以使用 AddScoped 方法:

publicvoidConfigureServices(IServiceCollection services)
{
services.AddScoped<IMyService, MyService>();
}

對於需要跨多個元件共享數據但又不需要在整個應用程式生命周期中持續存在的服務,作用域生命周期是一個很好的選擇。

3. 單例(Singleton)生命周期

單例生命周期意味著整個應用程式生命周期中只建立一個服務例項,並且該例項會在整個應用程式中共享。無論你從容器中解析多少次該服務,都會得到同一個例項。

要將服務註冊為單例生命周期,可以使用 AddSingleton 方法:

publicvoidConfigureServices(IServiceCollection services)
{
services.AddSingleton<IMyService, MyService>();
}

單例生命周期通常用於那些不需要頻繁建立和銷毀例項的服務,例如配置服務或資料庫上下文。

總結

ASP.NET Core的依賴註入容器提供了三種不同的生命周期選項,允許開發者根據服務的特性和需求選擇適當的生命周期。了解這些生命周期並正確選擇對於構建高效、可延伸和可維護的ASP.NET Core應用程式至關重要。透過合理地使用依賴註入和生命周期管理,你可以更好地控制應用程式中物件的建立和銷毀,從而提高效能和減少資源浪費。