Avatar ·

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. 在哪些场景下应该使用每种生命周期?