using WebTemplate.ServerAspects.Auth; using WebTemplate.ServerAspects.Controllers; using WebTemplate.ServerAspects.Cors; using WebTemplate.ServerAspects.Json; using WebTemplate.ServerAspects.Spa; using WebTemplate.ServerAspects.Swagger; using WebTemplate.ServerAspects.Validation; using WebTemplate.Status; namespace WebTemplate; public class AppServer { /// /// These are all the modules that are loaded. The order is _somewhat_ important since in many situations it is /// relevant which configuration or middleware is applied first and the modules are applied in the order in /// which they appear here. /// private readonly IList _modules = new List { new AuthModule(), new CorsModule(), new JsonModule(), new SwaggerModule(), new ValidationModule(), new StatusEndpointModule(), new ControllersModule(), // Keep the SpaRoutingModule at the very end new SpaRoutingModule(), }; public void Start(string[] args) { var builder = WebApplication.CreateBuilder(args); SetupConfiguration(builder.Configuration, builder.Environment); foreach (var appConfigurationModule in _modules) { appConfigurationModule.ConfigureServices(builder.Services, builder.Configuration); } var app = builder.Build(); app.UseHttpsRedirection(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } foreach (var appConfigurationModule in _modules) { appConfigurationModule.ConfigureApplication(app); } app.Run(); } private void SetupConfiguration(ConfigurationManager configuration, IWebHostEnvironment env) { configuration.AddJsonFile($"~/{env.ApplicationName}.json", optional: true); } }