【问题标题】:Using injected HttpClient from HttpClientFactory out of scope使用从 HttpClientFactory 注入的 HttpClient 超出范围
【发布时间】:2021-01-28 17:10:44
【问题描述】:

考虑这段代码

public class ScopedService {
    public readonly HttpClient client;
    public readonly MyHostedService hostedService;

    public ScopedService(HttpClient client, MyHostedService hostedService) {
        this.client = client;
        this.hostedService = hostedService;
    }

    public void LongAsyncOperationWeDontWantToWaitFor()
    {
        var httpTask = client.GetAsync("...");
        hostedService.SaveTaskForProcessSometimeInTheFuture(httpTask);
    }
}

我有一个范围服务,可以进行 http 调用。我希望在 http 调用完成之前关闭范围。如果我手动创建和处置httpClient,那么我自己会超出范围。但是由于在这种情况下,客户端是依赖注入的,所以我无法控制何时处理它。会不会有一种情况,在注入的httpClient 被释放之前,上下文无法关闭?

【问题讨论】:

  • 为什么要关心HttpClient的生命周期?

标签: c# asp.net-core dotnet-httpclient httpclientfactory


【解决方案1】:

您可以注入 IHttpClientFactory 并在需要时使用它来创建 HttpClient。

【讨论】:

  • 和注入HttpClient不一样吗?
  • 不,工厂是单例的,这意味着您可以在需要时创建客户端,可能超出请求范围。
  • 从 HttpClientFactory 创建的 HttpClient 上的 Dispose 也是无操作的,因此无需担心如何处理它。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2023-01-16
  • 2012-05-04
  • 2017-03-20
  • 2019-09-24
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
相关资源
最近更新 更多