using DocumentService.Client.Clients; using DocumentService.Client.Configuration; using DocumentService.Client.Interfaces; using Microsoft.Extensions.DependencyInjection; using System.Net; using System.Net.Http; namespace DocumentService.Client.Extensions; /// /// Extension methods for registering DocumentService clients in DI container. /// public static class ServiceCollectionExtensions { /// /// Registers all six DocumentService HTTP clients as Scoped via HttpClientFactory. /// /// Service collection /// Configuration action for client options /// Service collection for chaining public static IServiceCollection AddDocumentServiceClients( this IServiceCollection services, Action configureOptions) { services.Configure(configureOptions); var options = new DocumentServiceClientOptions(); configureOptions(options); var configureHandler = () => new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate }; void ConfigureClient(System.Net.Http.HttpClient client) { client.BaseAddress = new Uri(options.BaseUrl); client.Timeout = options.Timeout; } services.AddHttpClient(ConfigureClient) .ConfigurePrimaryHttpMessageHandler(configureHandler); services.AddHttpClient(ConfigureClient) .ConfigurePrimaryHttpMessageHandler(configureHandler); services.AddHttpClient(ConfigureClient) .ConfigurePrimaryHttpMessageHandler(configureHandler); services.AddHttpClient(ConfigureClient) .ConfigurePrimaryHttpMessageHandler(configureHandler); services.AddHttpClient(ConfigureClient) .ConfigurePrimaryHttpMessageHandler(configureHandler); // Conversion client is registered but all methods throw NotImplementedException // until the server-side endpoints are ready. services.AddHttpClient(ConfigureClient) .ConfigurePrimaryHttpMessageHandler(configureHandler); return services; } }