using Dipper.Alioth.Options; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Dipper.Alioth.Web; internal static class ServiceExtension { internal static WebApplicationBuilder AddStarApp(this WebApplicationBuilder builder, Action action) { builder.Services.AddSingleton(); var option = new StarOption(); action?.Invoke(option); builder.Services.AddControllers(options => { options.EnableEndpointRouting = false; option.MvcOption?.Invoke(options); }) .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; option.JsonOption?.Invoke(options); }); builder.Services.AddSession(); return builder; } internal static WebApplication UserStarApp(this WebApplication app) { if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/?m=Error500"); } app.UseStaticFiles(); app.UseHttpsRedirection(); app.UseRouting(); app.UseSession(); app.UseAuthorization(); app.MapControllers(); return app; } private static void AddFlexibleApi(IMvcBuilder builder, StarOption option) { builder.ConfigureApplicationPartManager(manager => { manager.ApplicationParts.Add(new AssemblyPart(typeof(IService).Assembly)); foreach (var module in option.Modules) { module.Initialize(); var assembly = module.GetType().Assembly; manager.ApplicationParts.Add(new AssemblyPart(assembly)); } //manager.FeatureProviders.Add(new ApiFeatureProvider()); }); } }