我有一个已经编写好的客户端,我想将其注册为单例:
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
,因为这将带来我们之前在使用单个长时间生存的HttpClient
时遇到的所有问题。显然的解决方案是注入一个HttpClientFactory
,现在可以用于每次类型化客户端需要一个HttpClient
实例时发出请求,而无需担心生命周期管理等问题,因为这已经延迟到HttpClientFactory
中。
我的问题是如何为一个简单的函数集成测试创建一个默认的HttpClientFactory
,我想在自动化测试中实例化类型化客户端并查看是否可以访问API并获得成功响应?
我不想设置一个ASP.NET Core TestServer和整个应用程序,因为这对我想要进行的功能测试来说是过度的。
没有公共构造函数可以用于注入HttpClientFactory
吗?