using File_Watcher.Models; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Hosting.WindowsServices; namespace File_Watcher; public class Program { internal static async Task Main(string[] args) { ILogger? logger = null; #pragma warning disable IL3050 WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args); #pragma warning restore IL3050 _ = webApplicationBuilder.Configuration.AddUserSecrets(); EAFLogConfiguration eafLogConfiguration = Models.Binder.EAFLogConfiguration.Get(webApplicationBuilder.Configuration); MetrologyConfiguration metrologyConfiguration = Models.Binder.MetrologyConfiguration.Get(webApplicationBuilder.Configuration); StratusConfiguration stratusConfiguration = Models.Binder.StratusConfiguration.Get(webApplicationBuilder.Configuration); WaferCounterConfiguration waferCounterConfiguration = Models.Binder.WaferCounterConfiguration.Get(webApplicationBuilder.Configuration); AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration, eafLogConfiguration, metrologyConfiguration, stratusConfiguration, waferCounterConfiguration); if (string.IsNullOrEmpty(appSettings.Company)) throw new Exception("Company name must have a value!"); try { List collection = []; _ = webApplicationBuilder.Services.AddHostedService(); _ = webApplicationBuilder.Services.AddSingleton(collection); _ = webApplicationBuilder.Services.AddSingleton(appSettings); if (WindowsServiceHelpers.IsWindowsService()) { collection.Add(nameof(WindowsServiceLifetime)); _ = webApplicationBuilder.Services.AddSingleton(); _ = webApplicationBuilder.Logging.AddEventLog(settings => { #pragma warning disable CA1416 if (string.IsNullOrEmpty(settings.SourceName)) settings.SourceName = webApplicationBuilder.Environment.ApplicationName; #pragma warning restore }); } using WebApplication webApplication = webApplicationBuilder.Build(); logger = webApplication.Services.GetRequiredService>(); if (string.IsNullOrEmpty(appSettings.Company)) { Environment.ExitCode = -1; _ = webApplication.StopAsync(); } logger.LogInformation("Starting Web Application"); logger.LogCritical("{Company}", appSettings.Company); await webApplication.RunAsync(); } catch (Exception ex) { try { logger?.LogCritical(ex, "WebApplication terminated unexpectedly"); } catch (Exception) { } throw; } } }