Пожалуйста, прочитайте о Типизированные клиенты :
Типизированный клиент принимает параметр HttpClient в своем конструкторе
вместо IHttpClientFactory
вашего классадолжен принять HttpClient
в своем конструкторе, который будет предоставлен DI (включается с расширением AddHttpClient
).
public class TestClient
{
private HttpClient Client { get; }
public TestClient(HttpClient client)
{
Client = client;
}
public Task<HttpResponseMessage> CallAsync(CancellationToken cancellation = default)
{
return client.GetAsync("/", cancellation);
}
}
Редактировать
(на основе вышеуказанных правок)
Если вы хотите переопределить поведение по умолчанию для метода расширения AddHttpClient
, вам следует зарегистрировать свою реализацию напрямую:
var services = new ServiceCollection();
services.AddHttpClient("test", httpClient =>
{
httpClient.BaseAddress = new Uri("https://localhost");
});
services.AddScoped<TestClient>();
var servicesProvider = services.BuildServiceProvider(validateScopes: true);
using (var scope = servicesProvider.CreateScope())
{
var client = scope.ServiceProvider.GetRequiredService<TestClient>();
}
public class TestClient
{
private IHttpClientFactory ClientFactory { get; }
public TestClient(IHttpClientFactory clientFactory)
{
ClientFactory = clientFactory;
}
public Task<HttpResponseMessage> CallAsync(CancellationToken cancellation = default)
{
using (var client = ClientFactory.CreateClient("test"))
{
return client.GetAsync("/", cancellation);
}
}
}