Change HttpClientBuilder to work on IServiceCollection

This commit is contained in:
2024-06-04 12:37:09 +02:00
parent 6a541e07a3
commit 3131558017
4 changed files with 22 additions and 126 deletions
@@ -1,4 +1,5 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Slim;
using System.Configuration;
@@ -157,13 +158,13 @@ public static class ServiceManagerExtensions
/// Register a scoped <see cref="IHttpClient{TScope}"/> to be used by the DI engine.
/// </summary>
/// <typeparam name="T">Type of the scoped <see cref="IHttpClient{TScope}"/>.</typeparam>
/// <param name="serviceProducer"><see cref="IServiceProducer"/>.</param>
/// <param name="services"><see cref="IServiceCollection"/>.</param>
/// <returns><see cref="HttpClientBuilder{T}"/> to build the http client.</returns>
public static HttpClientBuilder<T> RegisterHttpClient<T>(this IServiceProducer serviceProducer)
public static HttpClientBuilder<T> RegisterHttpClient<T>(this IServiceCollection services)
{
serviceProducer.ThrowIfNull(nameof(serviceProducer));
services.ThrowIfNull(nameof(services));
return new HttpClientBuilder<T>(serviceProducer);
return new HttpClientBuilder<T>(services);
}
[Obsolete($"{nameof(RegisterHttpFactory)} is obsolete. Please use {nameof(RegisterHttpClient)} for each service that requires an instance of {nameof(IHttpClient<object>)}.")]
@@ -1,4 +1,5 @@
using Slim;
using Microsoft.Extensions.DependencyInjection;
using Slim;
using System.Extensions;
using System.Net.Http.Headers;
@@ -6,7 +7,7 @@ namespace System.Net.Http;
public sealed class HttpClientBuilder<T>
{
private readonly IServiceProducer serviceProducer;
private readonly IServiceCollection services;
private Uri baseAddress;
private Func<IServiceProvider, HttpMessageHandler> httpMessageHandlerFactory;
@@ -15,11 +16,11 @@ public sealed class HttpClientBuilder<T>
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]
private TimeSpan timeout = TimeSpan.FromSeconds(100); //100 seconds default HttpClient value [https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.timeout?view=net-6.0]
internal HttpClientBuilder(IServiceProducer serviceProducer)
internal HttpClientBuilder(IServiceCollection services)
{
serviceProducer.ThrowIfNull(nameof(serviceProducer));
services.ThrowIfNull(nameof(services));
this.serviceProducer = serviceProducer;
this.services = services;
}
public HttpClientBuilder<T> WithMessageHandler(Func<IServiceProvider, HttpMessageHandler> httpMessageHandlerFactory)
@@ -64,9 +65,9 @@ public sealed class HttpClientBuilder<T>
return this;
}
public IServiceProducer Build()
public IServiceCollection Build()
{
this.serviceProducer.RegisterScoped<IHttpClient<T>>(sp =>
this.services.AddScoped<IHttpClient<T>>(sp =>
{
var client = this.httpMessageHandlerFactory is not null ?
new HttpClient<T>(this.httpMessageHandlerFactory(sp), this.disposeMessageHandler) :
@@ -79,6 +80,6 @@ public sealed class HttpClientBuilder<T>
return client;
});
return this.serviceProducer;
return this.services;
}
}
@@ -6,7 +6,7 @@
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<LangVersion>latest</LangVersion>
<Version>1.3.1</Version>
<Version>1.4.0</Version>
<Authors>Alexandru Macocian</Authors>
<RepositoryUrl>https://github.com/AlexMacocian/SystemExtensions</RepositoryUrl>
<Description>Extensions for the Slim Dependency Injection engine</Description>