using System.Data; using GSS2.Core.Analysis.AmineContent.Database; using GSS2.Core.Hardware; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Protocols.Configuration; namespace GSS2.Test; public class Program { public static void Main(string[] args) { 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.AddHostedService(); var host = builder.Build(); using (var scope = host.Services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService(); context.Database.Migrate(); } host.Run(); } }