Refactor Program.cs
This commit is contained in:
@@ -1,55 +1,102 @@
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using System.Reflection;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
using Serilog;
|
||||
using Serilog.Events;
|
||||
using TemplateNETService.Business;
|
||||
using TemplateNETService.Models;
|
||||
using Log = Serilog.Log;
|
||||
|
||||
namespace TemplateNETService;
|
||||
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
RunWebApp(args);
|
||||
}
|
||||
|
||||
private static void RunWebApp(string[] args)
|
||||
{
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
ConfigureConfiguration(builder);
|
||||
ConfigureLogging(builder);
|
||||
ConfigureServices(builder.Services);
|
||||
|
||||
var app = builder.Build();
|
||||
ConfigureApp(app);
|
||||
app.Run();
|
||||
}
|
||||
|
||||
private static void ConfigureConfiguration(WebApplicationBuilder builder)
|
||||
{
|
||||
builder.Configuration
|
||||
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
||||
.AddEnvironmentVariables();
|
||||
var generalConfig = builder.Configuration.GetSection("General").Get<General>();
|
||||
if (generalConfig == null)
|
||||
{
|
||||
throw new InvalidOperationException("Configuration section 'General' is missing or invalid in appsettings.json");
|
||||
}
|
||||
Config.general = generalConfig;
|
||||
}
|
||||
|
||||
private static void ConfigureLogging(WebApplicationBuilder builder)
|
||||
{
|
||||
Directory.CreateDirectory("_LOG");
|
||||
|
||||
Log.Logger = new LoggerConfiguration()
|
||||
.WriteTo.Console()
|
||||
.MinimumLevel.Debug()
|
||||
.MinimumLevel.Override("Microsoft", LogEventLevel.Error) // Für Microsoft-Komponenten nur Warning+
|
||||
.WriteTo.File(Path.Combine(AppContext.BaseDirectory, "_LOG/TEST.log"), rollingInterval: RollingInterval.Day)
|
||||
.Filter.ByExcluding(logEvent => logEvent.Level == LogEventLevel.Information)
|
||||
.MinimumLevel.Override("Microsoft", LogEventLevel.Error)
|
||||
.WriteTo.File(
|
||||
Path.Combine(AppContext.BaseDirectory, "_LOG/TemplateNETService.log"),
|
||||
rollingInterval: RollingInterval.Day,
|
||||
fileSizeLimitBytes: 100000000,
|
||||
rollOnFileSizeLimit: true,
|
||||
retainedFileTimeLimit: TimeSpan.FromDays(14)
|
||||
)
|
||||
.WriteTo.File(
|
||||
Path.Combine(AppContext.BaseDirectory, "_LOG/TemplateNETService.error.log"),
|
||||
rollingInterval: RollingInterval.Day,
|
||||
restrictedToMinimumLevel: LogEventLevel.Error
|
||||
)
|
||||
.CreateLogger();
|
||||
|
||||
CreateHostBuilder(args).Build().Run();
|
||||
builder.Logging.ClearProviders();
|
||||
builder.Logging.AddSerilog(Log.Logger);
|
||||
builder.Host.UseSerilog();
|
||||
}
|
||||
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) =>
|
||||
Host.CreateDefaultBuilder(args)
|
||||
.UseWindowsService()
|
||||
.ConfigureAppConfiguration((context, config) =>
|
||||
{
|
||||
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
|
||||
})
|
||||
.UseSerilog()
|
||||
.ConfigureWebHostDefaults(webBuilder =>
|
||||
{
|
||||
var config = new ConfigurationBuilder()
|
||||
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
||||
.Build();
|
||||
private static void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddControllers().AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); });
|
||||
|
||||
Config.general = config.GetSection("General").Get<General>();
|
||||
services.AddEndpointsApiExplorer();
|
||||
services.AddSwaggerGen(c =>
|
||||
{
|
||||
var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||
c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));
|
||||
});
|
||||
|
||||
webBuilder.UseStartup<Startup>();
|
||||
webBuilder.UseKestrel(options =>
|
||||
{
|
||||
options.ListenAnyIP(Config.general.ThisPort);
|
||||
})
|
||||
.ConfigureServices(services =>
|
||||
{
|
||||
services.AddHostedService<BaseWorker>();
|
||||
});
|
||||
});
|
||||
services.AddWindowsService();
|
||||
services.AddHostedService<BaseWorker>();
|
||||
}
|
||||
|
||||
private static void ConfigureApp(WebApplication app)
|
||||
{
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI();
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
app.UseAuthorization();
|
||||
app.MapControllers();
|
||||
|
||||
app.Urls.Add($"http://*:{Config.general.ThisPort}");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user