From 0763d82f6e5d370c0375e1ab8d4aeab7fb917c9f Mon Sep 17 00:00:00 2001 From: TekH Date: Sun, 28 Jun 2026 20:31:30 +0200 Subject: [PATCH] Refactor services to use IHttpClientFactory Refactored `DocReceiverElementService` and `EnvelopeService` to use `IHttpClientFactory` instead of directly injecting `HttpClient`, improving flexibility and testability. Updated constructors to accept `IHttpClientFactory` and replaced direct `HttpClient` usage with named clients (`"EnvelopeGenerator.Server"`). Adjusted methods to use the factory-created clients for HTTP requests. Added `using Microsoft.Extensions.Options;` in `Program.cs` and registered `EnvelopeService` and `DocReceiverElementService` in the dependency injection container for proper resolution. Clarified their usage in SSR scenarios with comments. Removed redundant `using` directives and aligned imports with the updated implementation. These changes enhance maintainability, scalability, and testability by leveraging `IHttpClientFactory` for better HTTP client management and dependency injection. --- .../Services/DocReceiverElementService.cs | 4 +++- .../Services/EnvelopeService.cs | 10 ++++++---- .../EnvelopeGenerator.Server/Program.cs | 7 +++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/DocReceiverElementService.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/DocReceiverElementService.cs index 8b3f01f0..991efecf 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/DocReceiverElementService.cs +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/DocReceiverElementService.cs @@ -4,13 +4,15 @@ using EnvelopeGenerator.Server.Client.Models; namespace EnvelopeGenerator.Server.Client.Services; -public class DocReceiverElementService(HttpClient http) +public class DocReceiverElementService(IHttpClientFactory clientFactory) { private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web); public async Task> GetAsync(string envelopeKey, CancellationToken cancel = default) { var url = $"/api/DocReceiverElement/{Uri.EscapeDataString(envelopeKey)}"; + + var http = clientFactory.CreateClient("EnvelopeGenerator.Server"); var response = await http.GetAsync(url, cancel); if (!response.IsSuccessStatusCode) diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/EnvelopeService.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/EnvelopeService.cs index f459a5e3..69b9f78e 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/EnvelopeService.cs +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/EnvelopeService.cs @@ -1,14 +1,15 @@ -using System.Net.Http.Json; -using System.Text.Json; using EnvelopeGenerator.Application.Common.Dto; using Microsoft.AspNetCore.WebUtilities; +using System.Net.Http; +using System.Net.Http.Json; +using System.Text.Json; namespace EnvelopeGenerator.Server.Client.Services; /// /// Retrieves s from the API. /// -public class EnvelopeService(HttpClient http) +public class EnvelopeService(IHttpClientFactory clientFactory) { private static readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web); @@ -45,7 +46,8 @@ public class EnvelopeService(HttpClient http) var url = QueryHelpers.AddQueryString(baseUrl, queryParams); - var response = await http.GetAsync(url, cancel); + var httpClient = clientFactory.CreateClient("EnvelopeGenerator.Server"); + var response = await httpClient.GetAsync(url, cancel); if (!response.IsSuccessStatusCode) { diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs index 36c952a2..d5bb91fb 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs @@ -10,6 +10,7 @@ using EnvelopeGenerator.Domain.Constants; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Localization; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; using System.Globalization; using Scalar.AspNetCore; using Microsoft.OpenApi.Models; @@ -318,6 +319,12 @@ try builder.Services.AddScoped(); builder.Services.AddSingleton(); + // EnvelopeService with HttpClient factory (for SSR scenarios) + builder.Services.AddScoped(); + + // DocReceiverElementService (SignatureService alternative) + builder.Services.AddScoped(); + // SSR Authentication Service (for Envelope Receiver pages) builder.Services.AddScoped();