From 9118c864bf1800946b78161e7064084f233e0d42 Mon Sep 17 00:00:00 2001 From: Macocian Alexandru Victor Date: Mon, 12 Sep 2022 19:22:55 +0200 Subject: [PATCH] Make httpclient use a factory to create handlers (#28) --- .../Http/HttpClientBuilderTests.cs | 4 ++-- .../Http/HttpClientBuilder.cs | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/SystemExtensions.DependencyInjection.Tests/Http/HttpClientBuilderTests.cs b/SystemExtensions.DependencyInjection.Tests/Http/HttpClientBuilderTests.cs index 112b127..91fca56 100644 --- a/SystemExtensions.DependencyInjection.Tests/Http/HttpClientBuilderTests.cs +++ b/SystemExtensions.DependencyInjection.Tests/Http/HttpClientBuilderTests.cs @@ -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(); diff --git a/SystemExtensions.NetStandard.DependencyInjection/Http/HttpClientBuilder.cs b/SystemExtensions.NetStandard.DependencyInjection/Http/HttpClientBuilder.cs index b719f86..77ae707 100644 --- a/SystemExtensions.NetStandard.DependencyInjection/Http/HttpClientBuilder.cs +++ b/SystemExtensions.NetStandard.DependencyInjection/Http/HttpClientBuilder.cs @@ -10,7 +10,7 @@ public sealed class HttpClientBuilder private readonly IServiceProducer serviceProducer; private Uri baseAddress; - private HttpMessageHandler httpMessageHandler; + private Func httpMessageHandlerFactory; private bool disposeMessageHandler; private Action 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 this.serviceProducer = serviceProducer; } - public HttpClientBuilder WithMessageHandler(HttpMessageHandler httpMessageHandler) + public HttpClientBuilder WithMessageHandler(Func 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 public IServiceProducer Build() { - this.serviceProducer.RegisterScoped>(_ => + this.serviceProducer.RegisterScoped>(sp => { - var client = this.httpMessageHandler is not null ? - new HttpClient(this.httpMessageHandler, this.disposeMessageHandler) : + var client = this.httpMessageHandlerFactory is not null ? + new HttpClient(this.httpMessageHandlerFactory(sp), this.disposeMessageHandler) : new HttpClient(); client.BaseAddress = this.baseAddress;