using NLog; using NLog.Web; using Microsoft.EntityFrameworkCore; using Webzine.EntitiesContext; using Webzine.Repository; using Webzine.Repository.Contracts; // Initiation du logger NLog pour la classe courante afin de pouvoir l'utiliser pour logger des messages d'information, d'erreur, etc avant la construction de l'application. var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); logger.Debug("init main"); try { var builder = WebApplication.CreateBuilder(args); // Ajoute les services necessaires pour permettre l'utilisation des // controllers avec des vues. builder.Services.AddControllersWithViews() // Ajoute la compilation des vues lors de l'execution de l'application. // Cela nous evite de recompiler l'application a chaque modification de vue. // Necessite le package Nuget Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. .AddRazorRuntimeCompilation(); builder.Services.AddSingleton(); builder.Services.AddDbContext(options => options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection"))); // NLog: Setup NLog for Dependency injection builder.Logging.ClearProviders(); builder.Host.UseNLog(); var app = builder.Build(); // Active la possibilite de servir des fichiers statiques presents dans // le dossier wwwroot. app.UseStaticFiles(); using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService(); db.Database.EnsureCreated(); } // Active le middleware permettant le routage des requetes entrantes. app.UseRouting(); // Ajoute une route pour les zones (Areas) comme Admin app.MapControllerRoute( name: "areas", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); // Ajoute un endpoint permettant de router les urls // avec la forme /controller/action/id(optionnel). app.MapControllerRoute( name: "default", pattern: "{controller=Accueil}/{action=Index}/{id?}"); app.Run(); } catch (Exception exception) { // NLog: attrape les exceptions non gerees et les logge. logger.Error(exception, "Stopped program because of exception"); throw; } finally { // Assure que NLog flush tous les messages de log avant de fermer l'application. NLog.LogManager.Shutdown(); }