Refactor API clients to use interface-based DI

Introduce interfaces for all API clients and update dependency injection to use these interfaces. Refactor services and components to depend on abstractions instead of concrete implementations, improving testability and maintainability.
This commit is contained in:
OlgunR
2026-04-20 13:23:16 +02:00
parent 177d418ac3
commit aab6478f9a
13 changed files with 56 additions and 12 deletions

View File

@@ -1,5 +1,5 @@
@inherits BandGridBase<CatalogReadDto>
@inject CatalogApiClient Api
@inject ICatalogApiClient Api
@if (!string.IsNullOrWhiteSpace(errorMessage))
{

View File

@@ -1,5 +1,5 @@
@inherits BandGridBase<MassDataReadDto>
@inject MassDataApiClient Api
@inject IMassDataApiClient Api
@if (!string.IsNullOrWhiteSpace(errorMessage))
{

View File

@@ -3,7 +3,7 @@
@implements IAsyncDisposable
@inject IOptions<AppSettings> AppSettingsOptions
@inject NavigationManager Navigation
@inject DashboardApiClient DashboardApi
@inject IDashboardApiClient DashboardApi
<PageTitle>Dashboards</PageTitle>

View File

@@ -21,10 +21,10 @@ void ConfigureClient(HttpClient client)
client.BaseAddress = new Uri(apiBaseUrl);
}
builder.Services.AddHttpClient<CatalogApiClient>(ConfigureClient);
builder.Services.AddHttpClient<DashboardApiClient>(ConfigureClient);
builder.Services.AddHttpClient<MassDataApiClient>(ConfigureClient);
builder.Services.AddHttpClient<LayoutApiClient>(ConfigureClient);
builder.Services.AddHttpClient<ICatalogApiClient, CatalogApiClient>(ConfigureClient);
builder.Services.AddHttpClient<IDashboardApiClient, DashboardApiClient>(ConfigureClient);
builder.Services.AddHttpClient<IMassDataApiClient, MassDataApiClient>(ConfigureClient);
builder.Services.AddHttpClient<ILayoutApiClient, LayoutApiClient>(ConfigureClient);
var app = builder.Build();

View File

@@ -5,7 +5,7 @@ using System.Text.Json;
namespace DbFirst.BlazorWebApp.Services
{
public class BandLayoutService(LayoutApiClient layoutApi, IJSRuntime jsRuntime)
public class BandLayoutService(ILayoutApiClient layoutApi, IJSRuntime jsRuntime)
{
private const string LayoutUserStorageKey = "layoutUser";
private readonly JsonSerializerOptions _jsonOptions = new(JsonSerializerDefaults.Web);

View File

@@ -4,7 +4,7 @@ using DbFirst.BlazorWebApp.Models;
namespace DbFirst.BlazorWebApp.Services;
public class CatalogApiClient
public class CatalogApiClient : ICatalogApiClient
{
private readonly HttpClient _httpClient;
private const string Endpoint = "api/catalogs";

View File

@@ -3,7 +3,7 @@ using DbFirst.BlazorWebApp.Models;
namespace DbFirst.BlazorWebApp.Services;
public class DashboardApiClient
public class DashboardApiClient : IDashboardApiClient
{
private readonly HttpClient _httpClient;
private const string Endpoint = "api/dashboard/dashboards";

View File

@@ -0,0 +1,12 @@
using DbFirst.BlazorWebApp.Models;
namespace DbFirst.BlazorWebApp.Services;
public interface ICatalogApiClient
{
Task<List<CatalogReadDto>> GetAllAsync();
Task<CatalogReadDto?> GetByIdAsync(int id);
Task<ApiResult<CatalogReadDto?>> CreateAsync(CatalogWriteDto dto);
Task<ApiResult<bool>> UpdateAsync(int id, CatalogWriteDto dto);
Task<ApiResult<bool>> DeleteAsync(int id);
}

View File

@@ -0,0 +1,9 @@
using DbFirst.BlazorWebApp.Models;
namespace DbFirst.BlazorWebApp.Services
{
public interface IDashboardApiClient
{
Task<List<DashboardInfoDto>> GetAllAsync();
}
}

View File

@@ -0,0 +1,11 @@
using DbFirst.BlazorWebApp.Models;
namespace DbFirst.BlazorWebApp.Services
{
public interface ILayoutApiClient
{
Task<LayoutDto?> GetAsync(string layoutType, string layoutKey, string userName);
Task<LayoutDto> UpsertAsync(LayoutDto dto);
Task DeleteAsync(string layoutType, string layoutKey, string userName);
}
}

View File

@@ -0,0 +1,12 @@
using DbFirst.BlazorWebApp.Models;
namespace DbFirst.BlazorWebApp.Services
{
public interface IMassDataApiClient
{
Task<int> GetCountAsync();
Task<List<MassDataReadDto>> GetAllAsync(int? skip, int? take);
Task<ApiResult<MassDataReadDto?>> UpsertAsync(MassDataWriteDto dto);
Task<MassDataReadDto?> GetByCustomerNameAsync(string customerName);
}
}

View File

@@ -3,7 +3,7 @@ using DbFirst.BlazorWebApp.Models;
namespace DbFirst.BlazorWebApp.Services;
public class LayoutApiClient
public class LayoutApiClient : ILayoutApiClient
{
private readonly HttpClient _httpClient;
private const string Endpoint = "api/layouts";

View File

@@ -3,7 +3,7 @@ using DbFirst.BlazorWebApp.Models;
namespace DbFirst.BlazorWebApp.Services;
public class MassDataApiClient
public class MassDataApiClient : IMassDataApiClient
{
private readonly HttpClient _httpClient;
private const string Endpoint = "api/massdata";