我有一个键入的客户端,我想将其注册为单例:
public class SomeHttpClient
{
private readonly IHttpClientFactory _clientFactory;
public SomeHttpClient(IHttpClientFactory clientFactory)
{
_clientFactory = clientFactory;
}
public Task MakeSomeCallAsync(...)
{
var client = _clientFactory.Create();
// Do more stuff
}
}
类型化的客户端必须是单例的,因为它有一些断路器逻辑,如果 API 限制客户端的速率,它会断开电路。必须在整个应用程序中断开电路,而不仅仅是当前的请求管道(否则客户端将继续访问已经受到其他实例速率限制的 API)。这已经通过使用封装了该功能的类型化客户端来实现(虽然不是 Polly)。
现在因为类型化的客户端将是一个单例,所以我们不能注入一个单例,HttpClient
因为这会带来我们之前在一个 long living 中遇到的所有问题HttpClient
。显而易见的解决方案是注入一个HttpClientFactory
now 可用于在HttpClient
每次键入客户端需要一个实例时发出一个实例,而不必担心生命周期管理等,因为这已推迟到HttpClientFactory
现在。
我现在的问题是如何HttpClientFactory
为一个简单的功能集成测试创建一个默认值,我想在其中实例化一个类型化的客户端,看看我是否可以点击 API 并从自动化测试中获得成功的响应?
我不想围绕它设置一个 ASP.NET Core TestServer 和一个完整的应用程序,因为这对于我现在想做的那种功能测试来说太过分了。
没有可用于注入的公共构造函数HttpClientFactory
?