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:
@@ -1,5 +1,5 @@
|
||||
@inherits BandGridBase<CatalogReadDto>
|
||||
@inject CatalogApiClient Api
|
||||
@inject ICatalogApiClient Api
|
||||
|
||||
@if (!string.IsNullOrWhiteSpace(errorMessage))
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
@inherits BandGridBase<MassDataReadDto>
|
||||
@inject MassDataApiClient Api
|
||||
@inject IMassDataApiClient Api
|
||||
|
||||
@if (!string.IsNullOrWhiteSpace(errorMessage))
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
@implements IAsyncDisposable
|
||||
@inject IOptions<AppSettings> AppSettingsOptions
|
||||
@inject NavigationManager Navigation
|
||||
@inject DashboardApiClient DashboardApi
|
||||
@inject IDashboardApiClient DashboardApi
|
||||
|
||||
<PageTitle>Dashboards</PageTitle>
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
12
DbFirst.BlazorWebApp/Services/ICatalogApiClient.cs
Normal file
12
DbFirst.BlazorWebApp/Services/ICatalogApiClient.cs
Normal 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);
|
||||
}
|
||||
9
DbFirst.BlazorWebApp/Services/IDashboardApiClient.cs
Normal file
9
DbFirst.BlazorWebApp/Services/IDashboardApiClient.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using DbFirst.BlazorWebApp.Models;
|
||||
|
||||
namespace DbFirst.BlazorWebApp.Services
|
||||
{
|
||||
public interface IDashboardApiClient
|
||||
{
|
||||
Task<List<DashboardInfoDto>> GetAllAsync();
|
||||
}
|
||||
}
|
||||
11
DbFirst.BlazorWebApp/Services/ILayoutApiClient.cs
Normal file
11
DbFirst.BlazorWebApp/Services/ILayoutApiClient.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
12
DbFirst.BlazorWebApp/Services/IMassDataApiClient.cs
Normal file
12
DbFirst.BlazorWebApp/Services/IMassDataApiClient.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user