AddTransient、AddScoped 和 AddSingleton 在 ASP.NET Core 中的区别:何时使用什么?
大家好!我最近开始学习 ASP.NET Core 及其内置的依赖注入(DI)机制。我似乎已经理解了在 `ConfigureServices` 中注册服务的方法,但服务生命周期的选择让我感到困惑。
我有一个简单的例子。假设我正在编写一个在线商店应用程序,我有一个管理用户购物车的 `CartService` 服务,以及一个记录操作的 `LoggerService` 服务。
在启动文件中,我这样注册它们:
```csharp
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient();
services.AddScoped();
services.AddSingleton();
}
```
我不完全理解 `AddTransient`、`AddScoped` 和 `AddSingleton` 之间的区别。网上有很多解释,但往往过于抽象。
我的问题是:
1. 如果我选择了错误的生命周期会发生什么?例如,将数据库服务注册为 Singleton?
2. 在哪些场景下应该使用每种生命周期?