file-watcher/Program.cs
Mike Phares 27ba309e88 HelperEDADatabase
HelperEAFProgramData
HelperCompass
HelperInfinityQS
HelperSerial
HelperTCP
dotnet_analyzer_diagnostic
2024-04-16 10:32:55 -07:00

78 lines
4.5 KiB
C#

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<Program>? logger = null;
#pragma warning disable IL3050
WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
#pragma warning restore IL3050
_ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
DriveConfiguration driveConfiguration = Models.Binder.DriveConfiguration.Get(webApplicationBuilder.Configuration);
EAFLogConfiguration eafLogConfiguration = Models.Binder.EAFLogConfiguration.Get(webApplicationBuilder.Configuration);
EAFProgramDataConfiguration eafProgramDataConfiguration = Models.Binder.EAFProgramDataConfiguration.Get(webApplicationBuilder.Configuration);
EDADatabaseConfiguration edaDatabaseConfiguration = Models.Binder.EDADatabaseConfiguration.Get(webApplicationBuilder.Configuration);
SerialConfiguration serialConfiguration = Models.Binder.SerialConfiguration.Get(webApplicationBuilder.Configuration);
StratusConfiguration stratusConfiguration = Models.Binder.StratusConfiguration.Get(webApplicationBuilder.Configuration);
CompassConfiguration compassConfiguration = Models.Binder.CompassConfiguration.Get(webApplicationBuilder.Configuration);
MetrologyConfiguration metrologyConfiguration = Models.Binder.MetrologyConfiguration.Get(webApplicationBuilder.Configuration);
WaferCounterConfiguration waferCounterConfiguration = Models.Binder.WaferCounterConfiguration.Get(webApplicationBuilder.Configuration);
TransmissionControlProtocolConfiguration transmissionControlProtocolConfiguration = Models.Binder.TransmissionControlProtocolConfiguration.Get(webApplicationBuilder.Configuration);
AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration,
compassConfiguration,
driveConfiguration,
eafLogConfiguration,
eafProgramDataConfiguration,
edaDatabaseConfiguration,
metrologyConfiguration,
serialConfiguration,
stratusConfiguration,
transmissionControlProtocolConfiguration,
waferCounterConfiguration);
if (string.IsNullOrEmpty(appSettings.Company))
throw new Exception("Company name must have a value!");
try
{
List<string> collection = [];
_ = webApplicationBuilder.Services.AddHostedService<Worker>();
_ = webApplicationBuilder.Services.AddSingleton(collection);
_ = webApplicationBuilder.Services.AddSingleton(appSettings);
if (WindowsServiceHelpers.IsWindowsService())
{
collection.Add(nameof(WindowsServiceLifetime));
_ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
_ = 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<ILogger<Program>>();
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;
}
}
}