From 34635c39b56bcdf9d6cad5c56c64d747e140308d Mon Sep 17 00:00:00 2001 From: Alek-ban Date: Mon, 15 Dec 2025 15:32:47 +0300 Subject: [PATCH] feat: create di helper and update appsettings --- GSS2.Core/DependencyInjectionHelper.cs | 96 ++++++++++++++++++++++++++ GSS2.Core/GSS2.Core.csproj | 2 + GSS2.Test/Program.cs | 56 ++++----------- GSS2.Test/appsettings.json | 10 ++- 4 files changed, 121 insertions(+), 43 deletions(-) create mode 100644 GSS2.Core/DependencyInjectionHelper.cs diff --git a/GSS2.Core/DependencyInjectionHelper.cs b/GSS2.Core/DependencyInjectionHelper.cs new file mode 100644 index 0000000..0557714 --- /dev/null +++ b/GSS2.Core/DependencyInjectionHelper.cs @@ -0,0 +1,96 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.IdentityModel.Protocols.Configuration; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using GSS2.Core.Hardware; +using GSS2.Core.Analysis.AmineContent.Database; + +namespace GSS2.Core; + +public static class DependencyInjectionHelper +{ + public static IServiceCollection AddTemperatureHumidityService(this IServiceCollection services, string section) => services + .AddSingleton( + serviceProvider => + { + var configuration = serviceProvider.GetService(); + if (configuration is null) + throw new Exception("Cannot get configuration"); + var serviceConfiguration = configuration.GetSection(section).Get(); + if (serviceConfiguration is null) + throw new InvalidConfigurationException($"Cannot get configuration {section}"); + var logger = serviceProvider.GetService>(); + if (logger is null) + throw new Exception("Cannot get logger"); + return new TemperatureHumidityService(logger, serviceConfiguration); + } + ); + public static IServiceCollection AddLightsService(this IServiceCollection services, string section) => services + .AddSingleton( + serviceProvider => + { + var configuration = serviceProvider.GetService(); + if (configuration is null) + throw new Exception("Cannot get configuration"); + var serviceConfiguration = configuration.GetSection(section).Get(); + if (serviceConfiguration is null) + throw new InvalidConfigurationException($"Cannot get configuration {section}"); + var logger = serviceProvider.GetService>(); + if (logger is null) + throw new Exception("Cannot get logger"); + return new LightsService(logger, serviceConfiguration); + } + ); + public static IServiceCollection AddIlluminatorService(this IServiceCollection services, string section) => services + .AddSingleton( + serviceProvider => + { + var configuration = serviceProvider.GetService(); + if (configuration is null) + throw new Exception("Cannot get configuration"); + var serviceConfiguration = configuration.GetSection(section).Get(); + if (serviceConfiguration is null) + throw new InvalidConfigurationException($"Cannot get configuration {section}"); + var logger = serviceProvider.GetService>(); + if (logger is null) + throw new Exception("Cannot get logger"); + return new IlluminatorService(logger, serviceConfiguration); + } + ); + public static IServiceCollection AddCameraService(this IServiceCollection services, string section) => services + .AddSingleton( + serviceProvider => + { + var configuration = serviceProvider.GetService(); + if (configuration is null) + throw new Exception("Cannot get configuration"); + var serviceConfiguration = configuration.GetSection(section).Get(); + if (serviceConfiguration is null) + throw new InvalidConfigurationException($"Cannot get configuration {section}"); + var logger = serviceProvider.GetService>(); + if (logger is null) + throw new Exception("Cannot get logger"); + return new CameraService(logger, serviceConfiguration); + } + ); + + public static IServiceCollection AddAmineContentCalibrationContext(this IServiceCollection services, IConfigurationManager configuration) => services + .AddDbContext( + options => + { + var databasePath = configuration.GetConnectionString("AmineContentCalibrationDatabasePath"); + options.UseSqlite($"Data Source={databasePath}"); + }, + ServiceLifetime.Singleton + ); + public static IServiceCollection AddAmineContentResultsContext(this IServiceCollection services, IConfigurationManager configuration) => services + .AddDbContext( + options => + { + var databasePath = configuration.GetConnectionString("AmineContentResultsDatabasePath"); + options.UseSqlite($"Data Source={databasePath}"); + }, + ServiceLifetime.Singleton + ); +} \ No newline at end of file diff --git a/GSS2.Core/GSS2.Core.csproj b/GSS2.Core/GSS2.Core.csproj index 6c5f67f..ccefd78 100644 --- a/GSS2.Core/GSS2.Core.csproj +++ b/GSS2.Core/GSS2.Core.csproj @@ -7,6 +7,7 @@ + @@ -18,6 +19,7 @@ + diff --git a/GSS2.Test/Program.cs b/GSS2.Test/Program.cs index ef17f60..e7db71c 100644 --- a/GSS2.Test/Program.cs +++ b/GSS2.Test/Program.cs @@ -1,8 +1,6 @@ -using System.Data; -using GSS2.Core.Analysis.AmineContent.Database; -using GSS2.Core.Hardware; using Microsoft.EntityFrameworkCore; -using Microsoft.IdentityModel.Protocols.Configuration; +using GSS2.Core; +using GSS2.Core.Analysis.AmineContent.Database; namespace GSS2.Test; @@ -12,44 +10,13 @@ public class Program { var builder = Host.CreateApplicationBuilder(args); - builder.Services.AddDbContext( - options => - { - var databasePath = builder.Configuration.GetConnectionString("AmineContentCalibrationDatabasePath"); - options.UseSqlite($"Data Source={databasePath}"); - }, - ServiceLifetime.Singleton - ); - builder.Services.AddSingleton( - serviceProvider => - { - var configuration = serviceProvider.GetService(); - if (configuration is null) - throw new Exception("Cannot get configuration"); - var serviceConfiguration = configuration.GetSection("Hardware:Lights").Get(); - if (serviceConfiguration is null) - throw new InvalidConfigurationException("Cannot get configuration (Hardware:Lights)"); - var logger = serviceProvider.GetService>(); - if (logger is null) - throw new Exception("Cannot get logger"); - return new LightsService(logger, serviceConfiguration); - } - ); - builder.Services.AddSingleton( - serviceProvider => - { - var configuration = serviceProvider.GetService(); - if (configuration is null) - throw new Exception("Cannot get configuration"); - var serviceConfiguration = configuration.GetSection("Hardware:TemperatureHumidity").Get(); - if (serviceConfiguration is null) - throw new InvalidConfigurationException("Cannot get configuration (Hardware:TemperatureHumidity)"); - var logger = serviceProvider.GetService>(); - if (logger is null) - throw new Exception("Cannot get logger"); - return new TemperatureHumidityService(logger, serviceConfiguration); - } - ); + builder.Services.AddAmineContentCalibrationContext(builder.Configuration); + builder.Services.AddAmineContentResultsContext(builder.Configuration); + + builder.Services.AddLightsService("Hardware:Lights"); + builder.Services.AddTemperatureHumidityService("Hardware:TemperatureHumidity"); + builder.Services.AddIlluminatorService("Hardware:Illuminator"); + builder.Services.AddCameraService("Hardware:Camera"); builder.Services.AddHostedService(); @@ -60,6 +27,11 @@ public class Program var context = scope.ServiceProvider.GetRequiredService(); context.Database.Migrate(); } + using (var scope = host.Services.CreateScope()) + { + var context = scope.ServiceProvider.GetRequiredService(); + context.Database.Migrate(); + } host.Run(); } diff --git a/GSS2.Test/appsettings.json b/GSS2.Test/appsettings.json index d67b159..4deb7fa 100644 --- a/GSS2.Test/appsettings.json +++ b/GSS2.Test/appsettings.json @@ -6,7 +6,8 @@ } }, "ConnectionStrings": { - "AmineContentCalibrationDatabasePath": "AmineContentCalibration.db" + "AmineContentCalibrationDatabasePath": "AmineContentCalibration.db", + "AmineContentResultsDatabasePath": "AmineContentResults.db" }, "Hardware": { "Illuminator": { @@ -22,6 +23,13 @@ "MaxUv254PwmDuty": 1.0, "MaxUv365PwmDuty": 1.0 }, + "Camera": { + "ViewFinderWidth": 1920, + "ViewFinderHeight": 1080, + "ViewFinderFps": 30, + "ImageCaptureWidth": 4056, + "ImageCaptureHeight": 3080 + }, "TemperatureHumidity": { "Bus": 6, "Address": 69