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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,6 +4,7 @@
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject ContainerStorage containerStorage @inject ContainerStorage containerStorage
@inject IServersEFCoreRepository ServersEFCoreRepository
<h3>Server Status</h3> <h3>Server Status</h3>
<br/> <br/>
@ -48,7 +49,7 @@
if (server != null) if (server != null)
{ {
containerStorage.SetServer(null); containerStorage.SetServer(null);
ServersRepository.AddServer(server); ServersEFCoreRepository.AddServer(server);
NavigationManager.NavigateTo($"/servers/back_from/{server?.City}"); 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 Microsoft.EntityFrameworkCore;
using ServerManagement.Data; using ServerManagement.Data;
using ServerManagement.Models;
namespace ServerManagement; namespace ServerManagement.Models;
public class ServersEFCoreRepository public class ServersEFCoreRepository : IServersEFCoreRepository
{ {
private readonly IDbContextFactory<ServerManagementContext> contextFactory; private readonly IDbContextFactory<ServerManagementContext> contextFactory;
public ServersEFCoreRepository(IDbContextFactory<ServerManagementContext> contextFactory) public ServersEFCoreRepository(IDbContextFactory<ServerManagementContext> contextFactory)

View File

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

View File

@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using ServerManagement.Components; using ServerManagement.Components;
using ServerManagement.Data; using ServerManagement.Data;
using ServerManagement.Models;
using ServerManagement.StateStore; using ServerManagement.StateStore;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
@ -33,6 +34,11 @@ builder.Services.AddScoped<ContainerStorage>();
builder.Services.AddScoped<EindhovenOnlineServersStore>(); 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(); var app = builder.Build();
// Configure the HTTP request pipeline. // Configure the HTTP request pipeline.