【发布时间】:2021-09-07 21:49:37
【问题描述】:
能否请给出 RealTime 示例何时我们应该使用 AddSingleTon 以及何时 AddScoped 以及何时应该使用 AddTransient。
【问题讨论】:
-
这对stackoverflow来说不是一个好问题。有很多关于这个主题的文章和文档docs.microsoft.com/en-us/aspnet/core/fundamentals/…
能否请给出 RealTime 示例何时我们应该使用 AddSingleTon 以及何时 AddScoped 以及何时应该使用 AddTransient。
【问题讨论】:
据我所知,Singleton 通常用于全局单实例。例如,您将拥有一个图像存储服务,您可以拥有一个从给定位置加载图像并将它们保存在内存中以供将来使用的服务。
范围生命周期表示每个客户端请求创建一次服务。通常我们将它用于sql连接。这意味着它将根据请求创建和处理 sql 连接。
每次从服务容器请求它们时,都会创建一个临时生命周期服务。例如,在一个请求期间,您使用 httpclient 服务多次调用其他 web api 请求,但 web api 端点不同。那时您会将 httpclient 服务注册为瞬态。这意味着每次调用 httpclient 服务时,它都会创建一个新的 httpclient 来发送不同的请求。
【讨论】:
Transient — 每次请求时都会创建服务。它会在该对象的每个请求中获取注入对象的新实例。每次注入这个对象时,都会在类中注入一个新的实例。
Scoped — 在每个请求上创建服务(每个请求一次)。最推荐用于 WEB 应用程序。因此,例如,如果在请求期间您使用相同的依赖注入,在许多地方,您将使用该对象的相同实例,它将引用相同的内存分配。
Singleton — 服务在应用程序的生命周期内创建一次。它对整个应用程序使用相同的实例。
【讨论】: