feat: DI-Erweiterung für HttpClient-Services verbessert

- `AddHttpClientService` refaktoriert, um `AddHttpClientServiceDefaults` für gemeinsame Setup-Logik einzuführen.
- Überladungen für `AddHttpClientService` hinzugefügt, um sowohl `IConfigurationSection` als auch direkte Options-Instanz zu unterstützen.
- Bessere Erweiterbarkeit und sauberere Service-Konfiguration sichergestellt.
This commit is contained in:
Developer 02 2024-11-25 11:35:46 +01:00
parent ef7da0e52c
commit f9df2fb29e

View File

@ -2,21 +2,35 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using System.Net; using System.Net;
namespace DigitalData.Core.Client namespace DigitalData.Core.Client
{ {
public static class DIExtensions public static class DIExtensions
{ {
public static IServiceCollection AddHttpClientService<THttpClientOptions>(this IServiceCollection services, IConfigurationSection? section = null) internal static IServiceCollection AddHttpClientServiceDefaults(this IServiceCollection services)
where THttpClientOptions : class, IHttpClientOptions
{ {
services.TryAddSingleton<HttpClient>(); services.TryAddSingleton<HttpClient>();
services.TryAddSingleton<CookieContainer>(); services.TryAddSingleton<CookieContainer>();
services.TryAddSingleton<IBaseHttpClientService, BaseHttpClientService>(); services.TryAddSingleton<IBaseHttpClientService, BaseHttpClientService>();
if(section is not null) return services;
services.Configure<THttpClientOptions>(section); }
public static IServiceCollection AddHttpClientService<THttpClientOptions>(this IServiceCollection services, IConfigurationSection section)
where THttpClientOptions : class, IHttpClientOptions
{
services.AddHttpClientServiceDefaults();
services.TryAddSingleton<IHttpClientService<THttpClientOptions>, HttpClientService<THttpClientOptions>>();
return services.Configure<THttpClientOptions>(section);
}
public static IServiceCollection AddHttpClientService<THttpClientOptions>(this IServiceCollection services, THttpClientOptions options)
where THttpClientOptions : class, IHttpClientOptions
{
services.AddHttpClientServiceDefaults();
services.TryAddSingleton<IHttpClientService<THttpClientOptions>, HttpClientService<THttpClientOptions>>();
services.TryAddSingleton(Options.Create(options));
return services; return services;
} }
} }