using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging.Console; using GSS2.Core; using GSS2.Core.Analysis.AmineContent.Database; using Avalonia; using Avalonia.Vulkan; using GSS2.Test.Logging; using ConsoleFormatter = GSS2.Test.Logging.ConsoleFormatter; namespace GSS2.Test; public class Program { public static IHost ApplicationHost { get; } static Program() { ApplicationHost = BuildHostApp(); } [STAThread] public static void Main(string[] args) { BuildAvaloniaApp() .StartWithClassicDesktopLifetime(args); } private static IHost BuildHostApp() { var builder = Host.CreateApplicationBuilder(); builder.Logging.ClearProviders(); builder.Logging.AddConsole(options => options.FormatterName = nameof(ConsoleFormatter)); builder.Logging.AddConsoleFormatter(); builder.Logging.AddProvider(new FileLoggerProvider("full.log", true)); builder.Logging.AddProvider(new FileLoggerProvider("last_run.log", false)); builder.Services.AddSingleton(); 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", true); builder.Services.AddComputeResourcesService(); builder.Services.AddViewsAndModels(); var host = builder.Build(); host.Services.GetRequiredService(); using (var scope = host.Services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService(); context.Database.Migrate(); } using (var scope = host.Services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService(); context.Database.Migrate(); } return host; } private static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure() .UsePlatformDetect() .With(new X11PlatformOptions { RenderingMode = [X11RenderingMode.Vulkan] }) .With(new VulkanOptions { VulkanInstanceCreationOptions = new VulkanInstanceCreationOptions { UseDebug = true } }) .LogToTrace(); }