Dipper/Dipper.Alioth/Web/ServiceExtension.cs

73 lines
2.1 KiB
C#

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<StarOption> action)
{
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
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());
});
}
}