From 25373e51b8616d9c1dd6e9c5633ffe29ae8fd871 Mon Sep 17 00:00:00 2001 From: Duy Dao Date: Sat, 5 Jul 2025 08:16:35 +0700 Subject: [PATCH] rework: configuration service - to have it be more dynamic --- .../Configurations/IConfigurationsService.cs | 12 +++++------- CaddyManager/Services/Caddy/CaddyService.cs | 2 +- .../Configurations/ConfigurationsService.cs | 19 ++++++++++++------- CaddyManager/Services/Docker/DockerService.cs | 2 +- CaddyManager/appsettings.Development.json | 2 +- CaddyManager/appsettings.json | 4 ++-- 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/CaddyManager/Contracts/Configurations/IConfigurationsService.cs b/CaddyManager/Contracts/Configurations/IConfigurationsService.cs index 144634e..6cb533b 100644 --- a/CaddyManager/Contracts/Configurations/IConfigurationsService.cs +++ b/CaddyManager/Contracts/Configurations/IConfigurationsService.cs @@ -9,12 +9,10 @@ namespace CaddyManager.Contracts.Configurations; public interface IConfigurationsService { /// - /// Configurations for Caddy service + /// Method extracting the configurations from the appsettings.json file or environment variables base on the + /// type of the configuration class to determine the section name /// - CaddyServiceConfigurations CaddyServiceConfigurations { get; } - - /// - /// Configurations for Docker service - /// - DockerServiceConfiguration DockerServiceConfiguration { get; } + /// + /// + T Get() where T : class; } \ No newline at end of file diff --git a/CaddyManager/Services/Caddy/CaddyService.cs b/CaddyManager/Services/Caddy/CaddyService.cs index 668834d..5df733a 100644 --- a/CaddyManager/Services/Caddy/CaddyService.cs +++ b/CaddyManager/Services/Caddy/CaddyService.cs @@ -13,7 +13,7 @@ public class CaddyService(IConfigurationsService configurationsService) : ICaddy /// private const string CaddyGlobalConfigName = "Caddyfile"; - private CaddyServiceConfigurations Configurations => configurationsService.CaddyServiceConfigurations; + private CaddyServiceConfigurations Configurations => configurationsService.Get(); /// public List GetExistingCaddyConfigurations() diff --git a/CaddyManager/Services/Configurations/ConfigurationsService.cs b/CaddyManager/Services/Configurations/ConfigurationsService.cs index 52daa78..7dd3576 100644 --- a/CaddyManager/Services/Configurations/ConfigurationsService.cs +++ b/CaddyManager/Services/Configurations/ConfigurationsService.cs @@ -10,11 +10,16 @@ namespace CaddyManager.Services.Configurations; public class ConfigurationsService(IConfiguration configuration) : IConfigurationsService { /// - public CaddyServiceConfigurations CaddyServiceConfigurations => - configuration.GetSection(CaddyServiceConfigurations.Caddy).Get() ?? - new CaddyServiceConfigurations(); - - public DockerServiceConfiguration DockerServiceConfiguration => - configuration.GetSection(DockerServiceConfiguration.Docker).Get() ?? - new DockerServiceConfiguration(); + public T Get() where T : class + { + var section = typeof(T).Name; + + // Have the configuration section name be the section name without the "Configurations" suffix + if (section.EndsWith("Configurations")) + section = section[..^"Configurations".Length]; + else if (section.EndsWith("Configuration")) + section = section[..^"Configuration".Length]; + + return configuration.GetSection(section).Get() ?? Activator.CreateInstance(); + } } \ No newline at end of file diff --git a/CaddyManager/Services/Docker/DockerService.cs b/CaddyManager/Services/Docker/DockerService.cs index 328513b..3b02364 100644 --- a/CaddyManager/Services/Docker/DockerService.cs +++ b/CaddyManager/Services/Docker/DockerService.cs @@ -9,7 +9,7 @@ namespace CaddyManager.Services.Docker; /// public class DockerService(IConfigurationsService configurationsService) : IDockerService { - private DockerServiceConfiguration Configuration => configurationsService.DockerServiceConfiguration; + private DockerServiceConfiguration Configuration => configurationsService.Get(); /// /// Method to get the container id of the Caddy container by the name configured diff --git a/CaddyManager/appsettings.Development.json b/CaddyManager/appsettings.Development.json index 3975fcc..f2739bf 100644 --- a/CaddyManager/appsettings.Development.json +++ b/CaddyManager/appsettings.Development.json @@ -5,7 +5,7 @@ "Microsoft.AspNetCore": "Warning" } }, - "Caddy": { + "CaddyService": { "ConfigDir": "./caddy/config" } } diff --git a/CaddyManager/appsettings.json b/CaddyManager/appsettings.json index 1ad8666..54ec6ac 100644 --- a/CaddyManager/appsettings.json +++ b/CaddyManager/appsettings.json @@ -6,10 +6,10 @@ } }, "AllowedHosts": "*", - "Caddy": { + "CaddyService": { "ConfigDir": "/root/compose/caddy/config" }, - "Docker": { + "DockerService": { "CaddyContainerName": "caddy", "DockerHost": "unix:///var/run/docker.sock" }