using Fragalytics.Web; using Fragalytics.Web.Infrastructure; using Fragalytics.Web.Services; using Fragalytics.Web.Services.Parser; using Fragalytics.Web.Services.Render; using Fragalytics.Web.Services.Scoring; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Http.Features; using Microsoft.Extensions.Options; var contentRoot = AppPathResolver.ResolveContentRoot(Directory.GetCurrentDirectory(), AppContext.BaseDirectory); var webRoot = Path.Combine(contentRoot, "wwwroot"); var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, ContentRootPath = contentRoot, WebRootPath = Directory.Exists(webRoot) ? webRoot : null }); builder.Services.Configure(builder.Configuration.GetSection("Fragalytics")); var uploadMaxBytes = builder.Configuration.GetValue("Fragalytics:UploadMaxBytes") ?? 536_870_912; builder.WebHost.ConfigureKestrel(options => { options.Limits.MaxRequestBodySize = uploadMaxBytes; }); builder.Services.Configure(options => { options.MultipartBodyLengthLimit = uploadMaxBytes; }); var dataProtectionRoot = Path.GetFullPath(Path.Combine(contentRoot, builder.Configuration["Fragalytics:DataDirectory"] ?? "data", "keys")); Directory.CreateDirectory(dataProtectionRoot); builder.Services .AddDataProtection() .SetApplicationName("Fragalytics.Web") .PersistKeysToFileSystem(new DirectoryInfo(dataProtectionRoot)); builder.Services.AddRazorPages(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(serviceProvider => { var options = serviceProvider.GetRequiredService>().Value; return string.Equals(options.Parser.Mode, "external", StringComparison.OrdinalIgnoreCase) ? new ExternalProcessParserAdapter(serviceProvider.GetRequiredService>()) : new SampleDemoParserAdapter(); }); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddHostedService(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseStaticFiles(); app.UseRouting(); app.MapRazorPages(); app.Run(); public partial class Program { }