首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我们需要注册IHttpClientFactory?

为什么我们需要注册IHttpClientFactory?
EN

Stack Overflow用户
提问于 2020-01-15 10:55:53
回答 2查看 2.3K关注 0票数 0

这是文档https://learn.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-3.1,我们可以看到IHttpClientFactory是注册的:

代码语言:javascript
复制
services.AddHttpClient();

使用它的模型类是:

代码语言:javascript
复制
public BasicUsageModel(IHttpClientFactory clientFactory)
{
   _clientFactory = clientFactory;
}

public async Task OnGet()
{
   ...
   var client = _clientFactory.CreateClient();
   var response = await client.SendAsync(request);
   ...
}

但是如果我们不注册它,我们只创建一个新的实例作为:

代码语言:javascript
复制
public async Task OnGet()
{
   ...
   var client = new HttpClient();
   var response = await client.SendAsync(request);
   ...
}

这样BasicUsageModel的构造函数就不需要带任何参数,当单元测试时,我不需要使用Moq来模拟它,这不是更好吗?

对于第一种情况,我如何在没有实际发送请求的情况下模拟IHttpClientFactory来测试OnGet()

EN

回答 2

Stack Overflow用户

发布于 2020-01-15 11:02:38

当做单元测试时,我不需要用Moq来模拟它,这不是更好吗?

不不是的。单元测试的全部目的是在没有依赖项的情况下测试单元。在这种情况下,没有要连接到的实际服务器。

假设您的客户端有一个单元测试--实际获取数据,以及一个单元测试--当您的客户端无法获得数据时,您就无法合理地用您的方式进行这种测试。

您需要模拟它,以便能够为您的http调用的不同结果提供多个测试用例。

票数 0
EN

Stack Overflow用户

发布于 2020-01-15 11:06:09

除了已经提出的UnitTesting点之外,您链接的文档指定了直接使用IHttpClientFactory来安装新HttpClient的主要原因之一:

管理底层HttpClientMessageHandler实例的池和生存期。自动管理避免了手动管理HttpClient生存期时出现的常见DNS (域名系统)问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59749937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档