From 45011122b2e0bfb4942a6dc3a3a37fab65da9589 Mon Sep 17 00:00:00 2001 From: OlgunR Date: Mon, 11 May 2026 17:08:52 +0200 Subject: [PATCH] Refactor API clients to use primary constructor for HttpClient Refactored CatalogApiClient, DashboardApiClient, LayoutApiClient, and MassDataApiClient to use C# primary constructor syntax for injecting HttpClient. Removed private _httpClient fields and updated all usages to reference the constructor parameter directly. This change simplifies the code and modernizes dependency injection without altering any API logic. --- .../Services/CatalogApiClient.cs | 18 ++++++------------ .../Services/DashboardApiClient.cs | 10 ++-------- .../Services/LayoutApiClient.cs | 14 ++++---------- .../Services/MassDataApiClient.cs | 16 +++++----------- 4 files changed, 17 insertions(+), 41 deletions(-) diff --git a/DbFirst.BlazorWebApp/Services/CatalogApiClient.cs b/DbFirst.BlazorWebApp/Services/CatalogApiClient.cs index 34b834f..9fa4299 100644 --- a/DbFirst.BlazorWebApp/Services/CatalogApiClient.cs +++ b/DbFirst.BlazorWebApp/Services/CatalogApiClient.cs @@ -3,30 +3,24 @@ using DbFirst.Contracts.Catalogs; namespace DbFirst.BlazorWebApp.Services; -public class CatalogApiClient : ICatalogApiClient +public class CatalogApiClient(HttpClient httpClient) : ICatalogApiClient { - private readonly HttpClient _httpClient; private const string Endpoint = "api/catalogs"; - public CatalogApiClient(HttpClient httpClient) - { - _httpClient = httpClient; - } - public async Task> GetAllAsync(CancellationToken ct = default) { - var result = await _httpClient.GetFromJsonAsync>(Endpoint, ct); + var result = await httpClient.GetFromJsonAsync>(Endpoint, ct); return result ?? []; } public async Task GetByIdAsync(int id, CancellationToken ct = default) { - return await _httpClient.GetFromJsonAsync($"{Endpoint}/{id}", ct); + return await httpClient.GetFromJsonAsync($"{Endpoint}/{id}", ct); } public async Task> CreateAsync(CatalogWriteDto dto, CancellationToken ct = default) { - var response = await _httpClient.PostAsJsonAsync(Endpoint, dto, ct); + var response = await httpClient.PostAsJsonAsync(Endpoint, dto, ct); if (response.IsSuccessStatusCode) { var payload = await response.Content.ReadFromJsonAsync(); @@ -39,7 +33,7 @@ public class CatalogApiClient : ICatalogApiClient public async Task> UpdateAsync(int id, CatalogWriteDto dto, CancellationToken ct = default) { - var response = await _httpClient.PutAsJsonAsync($"{Endpoint}/{id}", dto, ct); + var response = await httpClient.PutAsJsonAsync($"{Endpoint}/{id}", dto, ct); if (response.IsSuccessStatusCode) { return ApiResult.Ok(true); @@ -51,7 +45,7 @@ public class CatalogApiClient : ICatalogApiClient public async Task> DeleteAsync(int id, CancellationToken ct = default) { - var response = await _httpClient.DeleteAsync($"{Endpoint}/{id}", ct); + var response = await httpClient.DeleteAsync($"{Endpoint}/{id}", ct); if (response.IsSuccessStatusCode) { return ApiResult.Ok(true); diff --git a/DbFirst.BlazorWebApp/Services/DashboardApiClient.cs b/DbFirst.BlazorWebApp/Services/DashboardApiClient.cs index e2feb93..441d837 100644 --- a/DbFirst.BlazorWebApp/Services/DashboardApiClient.cs +++ b/DbFirst.BlazorWebApp/Services/DashboardApiClient.cs @@ -2,19 +2,13 @@ using DbFirst.Contracts.Dashboards; namespace DbFirst.BlazorWebApp.Services; -public class DashboardApiClient : IDashboardApiClient +public class DashboardApiClient(HttpClient httpClient) : IDashboardApiClient { - private readonly HttpClient _httpClient; private const string Endpoint = "api/dashboard/dashboards"; - public DashboardApiClient(HttpClient httpClient) - { - _httpClient = httpClient; - } - public async Task> GetAllAsync(CancellationToken ct = default) { - var result = await _httpClient.GetFromJsonAsync>(Endpoint, ct); + var result = await httpClient.GetFromJsonAsync>(Endpoint, ct); return result ?? []; } } diff --git a/DbFirst.BlazorWebApp/Services/LayoutApiClient.cs b/DbFirst.BlazorWebApp/Services/LayoutApiClient.cs index 39943cd..1b49425 100644 --- a/DbFirst.BlazorWebApp/Services/LayoutApiClient.cs +++ b/DbFirst.BlazorWebApp/Services/LayoutApiClient.cs @@ -2,20 +2,14 @@ using DbFirst.Contracts.Layouts; namespace DbFirst.BlazorWebApp.Services; -public class LayoutApiClient : ILayoutApiClient +public class LayoutApiClient(HttpClient httpClient) : ILayoutApiClient { - private readonly HttpClient _httpClient; private const string Endpoint = "api/layouts"; - public LayoutApiClient(HttpClient httpClient) - { - _httpClient = httpClient; - } - public async Task GetAsync(string layoutType, string layoutKey, string userName, CancellationToken ct = default) { var url = $"{Endpoint}?layoutType={Uri.EscapeDataString(layoutType)}&layoutKey={Uri.EscapeDataString(layoutKey)}&userName={Uri.EscapeDataString(userName)}"; - var response = await _httpClient.GetAsync(url, ct); + var response = await httpClient.GetAsync(url, ct); if (response.StatusCode == System.Net.HttpStatusCode.NotFound) { return null; @@ -27,7 +21,7 @@ public class LayoutApiClient : ILayoutApiClient public async Task UpsertAsync(LayoutDto dto, CancellationToken ct = default) { - var response = await _httpClient.PostAsJsonAsync(Endpoint, dto, ct); + var response = await httpClient.PostAsJsonAsync(Endpoint, dto, ct); if (!response.IsSuccessStatusCode) { var detail = await ApiClientHelper.ReadErrorAsync(response); @@ -41,7 +35,7 @@ public class LayoutApiClient : ILayoutApiClient public async Task DeleteAsync(string layoutType, string layoutKey, string userName, CancellationToken ct = default) { var url = $"{Endpoint}?layoutType={Uri.EscapeDataString(layoutType)}&layoutKey={Uri.EscapeDataString(layoutKey)}&userName={Uri.EscapeDataString(userName)}"; - var response = await _httpClient.DeleteAsync(url, ct); + var response = await httpClient.DeleteAsync(url, ct); if (response.StatusCode == System.Net.HttpStatusCode.NotFound) { return; diff --git a/DbFirst.BlazorWebApp/Services/MassDataApiClient.cs b/DbFirst.BlazorWebApp/Services/MassDataApiClient.cs index ae7815c..be2f1bd 100644 --- a/DbFirst.BlazorWebApp/Services/MassDataApiClient.cs +++ b/DbFirst.BlazorWebApp/Services/MassDataApiClient.cs @@ -4,19 +4,13 @@ using Microsoft.AspNetCore.WebUtilities; namespace DbFirst.BlazorWebApp.Services; -public class MassDataApiClient : IMassDataApiClient +public class MassDataApiClient(HttpClient httpClient) : IMassDataApiClient { - private readonly HttpClient _httpClient; private const string Endpoint = "api/massdata"; - public MassDataApiClient(HttpClient httpClient) - { - _httpClient = httpClient; - } - public async Task GetCountAsync(CancellationToken ct = default) { - var result = await _httpClient.GetFromJsonAsync("api/massdata/count", ct); + var result = await httpClient.GetFromJsonAsync("api/massdata/count", ct); return result ?? 0; } @@ -27,13 +21,13 @@ public class MassDataApiClient : IMassDataApiClient if (take.HasValue) query["take"] = take.Value.ToString(); var url = QueryHelpers.AddQueryString(Endpoint, query); - var result = await _httpClient.GetFromJsonAsync>(url, ct); + var result = await httpClient.GetFromJsonAsync>(url, ct); return result ?? []; } public async Task> UpsertAsync(MassDataWriteDto dto, CancellationToken ct = default) { - var response = await _httpClient.PostAsJsonAsync($"{Endpoint}/upsert", dto, ct); + var response = await httpClient.PostAsJsonAsync($"{Endpoint}/upsert", dto, ct); if (response.IsSuccessStatusCode) { var payload = await response.Content.ReadFromJsonAsync(); @@ -51,7 +45,7 @@ public class MassDataApiClient : IMassDataApiClient return null; } - var response = await _httpClient.GetAsync($"{Endpoint}/{Uri.EscapeDataString(customerName)}", ct); + var response = await httpClient.GetAsync($"{Endpoint}/{Uri.EscapeDataString(customerName)}", ct); if (response.StatusCode == System.Net.HttpStatusCode.NotFound) { return null;