服务生存期
注册服务时,必须选择与在应用中使用服务的方式匹配的生存期。 生存期会影响服务在注入组件时的行为方式。 到目前为止,你已使用 AddSingleton
方法注册了服务。 此方法使用单一实例生存期注册服务。 ASP.NET Core 中的服务有三种内置生存期:
- 单一实例
- 有范围
- 短暂的
单一实例生存期
使用单一实例生存期注册的服务会在应用启动时创建一次,并在应用的生存期内重复使用。 这种生存期对于创建成本高昂或不会经常更改的服务非常有用。 例如,如果一个服务可以从文件中读取配置设置,则可以注册为单一实例。
请使用 AddSingleton
方法将单一实例服务添加到服务容器。
范围性生存期
使用范围性生存期注册的服务会在配置的每个范围内创建一次,ASP.NET Core 会为每个请求设置该范围。 ASP.NET Core 中的范围性服务通常在收到请求时创建,并在请求完成时处理掉。 如果服务需要访问特定于请求的数据,这种生存期会非常有用。 例如,从数据库中提取客户数据的服务可以注册为范围性服务。
请使用 AddScoped
方法将范围性服务添加到服务容器。
暂时性生存期
使用暂时性生存期注册的服务会在每次请求时创建。 这种生存期适用于轻型无状态服务。 例如,执行专用计算的服务可以注册为暂时性服务。
请使用 AddTransient
方法将暂时性服务添加到服务容器。
依赖于其他服务的服务
一个服务可以依赖于其他服务,这通常是通过其构造函数注入其依赖项实现的。 注册依赖于其他服务的服务时,必须考虑服务生存期。 例如,单一实例服务不应依赖于范围性服务,因为范围性服务会在请求完成时被处理掉,而单一实例则在应用的整个生存期内都存在。 幸运的是,默认情况下,ASP.NET Core 会检查此错误配置,并在应用启动时报告范围验证错误,以便快速识别和解决该问题。