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, bool autoInitialize = false) => 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, autoInitialize); } ); public static IServiceCollection AddComputeResourcesService(this IServiceCollection services) => services .AddSingleton(); 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 ); }