Make httpclient use a factory to create handlers (#28)

This commit is contained in:
2022-09-12 19:22:55 +02:00
committed by GitHub
parent fb84036215
commit 9118c864bf
2 changed files with 9 additions and 9 deletions
@@ -165,7 +165,7 @@ public sealed class HttpClientBuilderTests
handlerMock.Called.Should().BeTrue();
});
this.httpClientBuilder.WithMessageHandler(handlerMock)
this.httpClientBuilder.WithMessageHandler(sp => handlerMock)
.Build();
}
@@ -178,7 +178,7 @@ public sealed class HttpClientBuilderTests
.WithBaseAddress(this.baseAddress)
.WithDefaultRequestHeadersSetup(header => header.TryAddWithoutValidation(SomeHeader, SomeValue))
.WithMaxResponseBufferSize(5)
.WithMessageHandler(messageHandler)
.WithMessageHandler(sp => messageHandler)
.WithTimeout(TimeSpan.FromSeconds(5))
.Build();
@@ -10,7 +10,7 @@ public sealed class HttpClientBuilder<T>
private readonly IServiceProducer serviceProducer;
private Uri baseAddress;
private HttpMessageHandler httpMessageHandler;
private Func<IServiceProvider, HttpMessageHandler> httpMessageHandlerFactory;
private bool disposeMessageHandler;
private Action<HttpRequestHeaders> defaultRequestHeadersSetup;
private long maxResponseBufferSize = 2147483647L; //2GB default HttpClient value [https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.maxresponsecontentbuffersize?view=net-6.0]
@@ -23,11 +23,11 @@ public sealed class HttpClientBuilder<T>
this.serviceProducer = serviceProducer;
}
public HttpClientBuilder<T> WithMessageHandler(HttpMessageHandler httpMessageHandler)
public HttpClientBuilder<T> WithMessageHandler(Func<IServiceProvider, HttpMessageHandler> httpMessageHandlerFactory)
{
httpMessageHandler.ThrowIfNull(nameof(httpMessageHandler));
httpMessageHandlerFactory.ThrowIfNull(nameof(httpMessageHandlerFactory));
this.httpMessageHandler = httpMessageHandler;
this.httpMessageHandlerFactory = httpMessageHandlerFactory;
return this;
}
@@ -67,10 +67,10 @@ public sealed class HttpClientBuilder<T>
public IServiceProducer Build()
{
this.serviceProducer.RegisterScoped<IHttpClient<T>>(_ =>
this.serviceProducer.RegisterScoped<IHttpClient<T>>(sp =>
{
var client = this.httpMessageHandler is not null ?
new HttpClient<T>(this.httpMessageHandler, this.disposeMessageHandler) :
var client = this.httpMessageHandlerFactory is not null ?
new HttpClient<T>(this.httpMessageHandlerFactory(sp), this.disposeMessageHandler) :
new HttpClient<T>();
client.BaseAddress = this.baseAddress;