【问题标题】:Should I use Singleton or Scoped service for making api calls in ASP.NET Core?我应该使用 Singleton 还是 Scoped 服务在 ASP.NET Core 中进行 api 调用?
【发布时间】:2021-07-07 12:25:48
【问题描述】:

我有一个用于进行 API 调用的类。我想将它作为依赖项传递,我想知道使用SingletonScoped 是否更好:

services.AddScoped<IHttpCallService, HttpCallService>();
 or 
services.AddSingleton<IHttpCallService, HttpCallService>();

我知道 Singleton 和 Scoped 在实例创建方面存在差异, 但我想知道哪一个更有效,更适合这种情况? 另外,如果我使用Singleton,是否意味着一切都会同步进行?

【问题讨论】:

  • 也许这会帮助你更好地理解:Dependency injection in ASP.NET Core.
  • 你说的是哪种应用程序?
  • 如果您使用的是 HttpClient... 最好的方法是使用单例并使用 async/await 生成您的 cals。无论如何,HttpClient 旨在更好地工作。
  • @AlexeyRumyantsev 这是一个 asp.net 核心 Web Api 应用程序。
  • 关于“这是否意味着一切都会同步工作?”:在 C# 中,没有任何类型的队列用于使用相同对象或方法的请求。如果多个线程都使用同一个单例对象,那么每个线程都有自己的栈,基本上是独立的。唯一真正共享的是单例对象上的任何字段。

标签: c# asp.net-core .net-core dependency-injection


【解决方案1】:

推荐的模式是让您的HttpCallService 依赖于HttpClient 实例,然后将其注册为Typed Client

services.AddHttpClient<HttpCallService>();

这会将HttpCallService 注册为临时服务。

【讨论】:

    【解决方案2】:

    最好的建议是在处理 api 调用时在这种情况下使用singleton。下面的文章解释了你不使用HttpClient作为singleton的问题是什么

    services.AddSingleton<IHttpCallService, HttpCallService>();
    

    阅读这篇文章以获得更深入的知识 https://www.stevejgordon.co.uk/httpclient-connection-pooling-in-dotnet-core

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-02
      • 2020-04-23
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      相关资源
      最近更新 更多