1
0

Create IServersEFCoreRepository interface, register as service and use dependency injection to replace the static ServersRepository.

This commit is contained in:
Kevin Matsubara 2025-04-16 23:46:00 +02:00
parent 3eb15f6f8c
commit dcf5e7b675
10 changed files with 51 additions and 15 deletions

View File

@ -2,6 +2,7 @@
@inject NavigationManager NavigationManager
@inject EindhovenOnlineServersStore EindhovenOnlineServersStore
@inject IServersEFCoreRepository ServersEFCoreRepository
@if (Server != null)
{
@ -69,7 +70,7 @@
{
if (serverId > 0)
{
ServersRepository.DeleteServer(serverId);
ServersEFCoreRepository.DeleteServer(serverId);
NavigationManager.Refresh(forceReload: true);
}
}
@ -113,6 +114,8 @@
}
}
this.Server.IsOnline = status;
ServersEFCoreRepository.UpdateServer(this.Server.Id, Server);
}
}
}

View File

@ -1,5 +1,7 @@
@using System.Threading;
@inject IServersEFCoreRepository ServersEFCoreRepository
<table class="table table-striped">
<RepeaterComponent Items="this.servers">
<Header>
@ -61,11 +63,11 @@
{
if (string.IsNullOrWhiteSpace(this.SearchFilter))
{
servers = ServersRepository.GetServersByCity(CityName ?? "Eindhoven");
servers = ServersEFCoreRepository.GetServersByCity(CityName ?? "Eindhoven");
}
else
{
servers = ServersRepository.SearchServers(SearchFilter);
servers = ServersEFCoreRepository.SearchServers(SearchFilter);
}
}
@ -77,11 +79,11 @@
{
if (string.IsNullOrWhiteSpace(this.SearchFilter))
{
servers = ServersRepository.GetServersByCity(CityName ?? "Eindhoven");
servers = ServersEFCoreRepository.GetServersByCity(CityName ?? "Eindhoven");
}
else
{
servers = ServersRepository.SearchServers(SearchFilter);
servers = ServersEFCoreRepository.SearchServers(SearchFilter);
}
// Render the component again by letting it know the state changed.
StateHasChanged();

View File

@ -2,6 +2,7 @@
@inject NavigationManager NavigationManager
@inject IJSRuntime JSRuntime
@inject IServersEFCoreRepository ServersEFCoreRepository
<NavigationLock
OnBeforeInternalNavigation="OnBeforeInternalNavigation"
@ -79,7 +80,7 @@ else
{
if (this.Id.HasValue)
{
server ??= ServersRepository.GetServerById(this.Id.Value);
server ??= ServersEFCoreRepository.GetServerById(this.Id.Value);
}
else
{
@ -98,11 +99,11 @@ else
{
if (this.Id.HasValue)
{
ServersRepository.UpdateServer(server.Id, server);
ServersEFCoreRepository.UpdateServer(server.Id, server);
}
else
{
ServersRepository.AddServer(server);
ServersEFCoreRepository.AddServer(server);
}
}

View File

@ -2,6 +2,7 @@
@using Microsoft.AspNetCore.Components.QuickGrid
@inject NavigationManager NavigationManager
@inject IServersEFCoreRepository ServersEFCoreRepository
<h3>QuickGrid demo</h3>
<br/>
@ -63,13 +64,21 @@
}
@code {
private List<Server>? servers = ServersRepository.GetServers();
private List<Server>? servers;
private PaginationState paginationState = new PaginationState { ItemsPerPage = 5 };
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
servers = ServersEFCoreRepository.GetServers();
}
}
private void DeleteServer(int serverId)
{
if (serverId > 0)
{
ServersRepository.DeleteServer(serverId);
ServersEFCoreRepository.DeleteServer(serverId);
NavigationManager.Refresh(forceReload: true);
}
}

View File

@ -5,6 +5,7 @@
@inject NavigationManager NavigationManager
@inject EindhovenOnlineServersStore EindhovenOnlineServersStore
@inject IServersEFCoreRepository ServersEFCoreRepository
<h3>Servers</h3>
<br/>
@ -64,7 +65,7 @@
StateHasChanged();
}
var serversEindhoven = ServersRepository.GetServersByCity("Eindhoven");
var serversEindhoven = ServersEFCoreRepository.GetServersByCity("Eindhoven");
if (serversEindhoven != null)
{
EindhovenOnlineServersStore.SetNumberServersOnline(serversEindhoven.Count(s => s.IsOnline));

View File

@ -4,6 +4,7 @@
@inject NavigationManager NavigationManager
@inject ContainerStorage containerStorage
@inject IServersEFCoreRepository ServersEFCoreRepository
<h3>Server Status</h3>
<br/>
@ -48,7 +49,7 @@
if (server != null)
{
containerStorage.SetServer(null);
ServersRepository.AddServer(server);
ServersEFCoreRepository.AddServer(server);
NavigationManager.NavigateTo($"/servers/back_from/{server?.City}");
}
}

View File

@ -0,0 +1,13 @@
namespace ServerManagement.Models
{
public interface IServersEFCoreRepository
{
void AddServer(Server server);
void DeleteServer(int serverId);
Server? GetServerById(int id);
List<Server> GetServers();
List<Server> GetServersByCity(string cityName);
List<Server> SearchServers(string serverFilter);
void UpdateServer(int serverId, Server server);
}
}

View File

@ -1,10 +1,9 @@
using Microsoft.EntityFrameworkCore;
using ServerManagement.Data;
using ServerManagement.Models;
namespace ServerManagement;
namespace ServerManagement.Models;
public class ServersEFCoreRepository
public class ServersEFCoreRepository : IServersEFCoreRepository
{
private readonly IDbContextFactory<ServerManagementContext> contextFactory;
public ServersEFCoreRepository(IDbContextFactory<ServerManagementContext> contextFactory)

View File

@ -1,5 +1,6 @@
namespace ServerManagement.Models
{
// No longer used, since ServersEFCoreRepository is now in use.
public static class ServersRepository
{
private static List<Server> servers = new List<Server>()

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore;
using ServerManagement.Components;
using ServerManagement.Data;
using ServerManagement.Models;
using ServerManagement.StateStore;
var builder = WebApplication.CreateBuilder(args);
@ -33,6 +34,11 @@ builder.Services.AddScoped<ContainerStorage>();
builder.Services.AddScoped<EindhovenOnlineServersStore>();
// Transient is used here, the database is already globally accessible,
// so this service does not need to live longer than necessary, just when needed.
// First the interface is registered, then its concrete implementation.
builder.Services.AddTransient<IServersEFCoreRepository, ServersEFCoreRepository>();
var app = builder.Build();
// Configure the HTTP request pipeline.