ASP.NET 核心多线程应用程序中的 addScoped 服务生命周期
addScoped service lifetime in an ASP.NET Core multithreaded application
我知道 AddSingleton()
在首次请求服务时会创建一个服务实例,并在所有需要该服务的地方重复使用该实例。
如果我的 ASP.NET 核心应用程序是多线程的,这是否意味着来自所有用户的所有 HTTP 请求将共享由 dependency injection (DI) 创建的同一个对象实例?
如果是这样,如果应用程序处理要存储的数据,那将不是一个好方法。有什么最佳做法吗?
例如,如果是一些可能不会在请求之间更改的共享数据,例如在应用程序启动时计算并在应用程序的整个生命周期中重复使用的某些值,那么这是一个可用的场景。
如 Microsoft 文档中所述,Service lifetimes,这取决于您的具体情况。
据推测,如果您有一个服务 A,并且您希望在每个请求上创建一个新实例,您可以使用 AddScoped() 而不是 AddSingleton()。将根据客户请求创建范围内的生命周期服务。
我知道 AddSingleton()
在首次请求服务时会创建一个服务实例,并在所有需要该服务的地方重复使用该实例。
如果我的 ASP.NET 核心应用程序是多线程的,这是否意味着来自所有用户的所有 HTTP 请求将共享由 dependency injection (DI) 创建的同一个对象实例?
如果是这样,如果应用程序处理要存储的数据,那将不是一个好方法。有什么最佳做法吗?
例如,如果是一些可能不会在请求之间更改的共享数据,例如在应用程序启动时计算并在应用程序的整个生命周期中重复使用的某些值,那么这是一个可用的场景。
如 Microsoft 文档中所述,Service lifetimes,这取决于您的具体情况。
据推测,如果您有一个服务 A,并且您希望在每个请求上创建一个新实例,您可以使用 AddScoped() 而不是 AddSingleton()。将根据客户请求创建范围内的生命周期服务。