80 lines
4.7 KiB
C#
80 lines
4.7 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);
|
|
NugetConfiguration nugetConfiguration = Models.Binder.NugetConfiguration.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,
|
|
nugetConfiguration,
|
|
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;
|
|
}
|
|
}
|
|
|
|
} |