Files
GSS2Rework/GSS2.Core/DependencyInjectionHelper.cs
T

96 lines
5.0 KiB
C#

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<IConfiguration>();
if (configuration is null)
throw new Exception("Cannot get configuration");
var serviceConfiguration = configuration.GetSection(section).Get<TemperatureHumidityService.TemperatureHumidityServiceConfiguration>();
if (serviceConfiguration is null)
throw new InvalidConfigurationException($"Cannot get configuration {section}");
var logger = serviceProvider.GetService<ILogger<TemperatureHumidityService>>();
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<IConfiguration>();
if (configuration is null)
throw new Exception("Cannot get configuration");
var serviceConfiguration = configuration.GetSection(section).Get<LightsService.LightsServiceConfiguration>();
if (serviceConfiguration is null)
throw new InvalidConfigurationException($"Cannot get configuration {section}");
var logger = serviceProvider.GetService<ILogger<LightsService>>();
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<IConfiguration>();
if (configuration is null)
throw new Exception("Cannot get configuration");
var serviceConfiguration = configuration.GetSection(section).Get<IlluminatorService.IlluminatorServiceConfiguration>();
if (serviceConfiguration is null)
throw new InvalidConfigurationException($"Cannot get configuration {section}");
var logger = serviceProvider.GetService<ILogger<IlluminatorService>>();
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<IConfiguration>();
if (configuration is null)
throw new Exception("Cannot get configuration");
var serviceConfiguration = configuration.GetSection(section).Get<CameraService.CameraServiceConfiguration>();
if (serviceConfiguration is null)
throw new InvalidConfigurationException($"Cannot get configuration {section}");
var logger = serviceProvider.GetService<ILogger<CameraService>>();
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<AmineContentCalibrationContext>(
options =>
{
var databasePath = configuration.GetConnectionString("AmineContentCalibrationDatabasePath");
options.UseSqlite($"Data Source={databasePath}");
},
ServiceLifetime.Singleton
);
public static IServiceCollection AddAmineContentResultsContext(this IServiceCollection services, IConfigurationManager configuration) => services
.AddDbContext<AmineContentResultsContext>(
options =>
{
var databasePath = configuration.GetConnectionString("AmineContentResultsDatabasePath");
options.UseSqlite($"Data Source={databasePath}");
},
ServiceLifetime.Singleton
);
}