87 lines
2.4 KiB
C#
87 lines
2.4 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);
|
|
|
|
var mvcBuilder = builder.Services.AddControllers(options =>
|
|
{
|
|
options.EnableEndpointRouting = false;
|
|
option.MvcOption?.Invoke(options);
|
|
})
|
|
.AddJsonOptions(options =>
|
|
{
|
|
options.JsonSerializerOptions.PropertyNamingPolicy = null;
|
|
option.JsonOption?.Invoke(options);
|
|
});
|
|
|
|
builder.Services.AddSwaggerGen(options =>
|
|
{
|
|
|
|
});
|
|
AddFlexibleApi(mvcBuilder, option);
|
|
|
|
builder.Services.AddSession();
|
|
|
|
return builder;
|
|
}
|
|
|
|
internal static WebApplication UserStarApp(this WebApplication app)
|
|
{
|
|
if (app.Environment.IsDevelopment())
|
|
{
|
|
app.UseDeveloperExceptionPage();
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI();
|
|
}
|
|
else
|
|
{
|
|
app.UseExceptionHandler("/?m=Error500");
|
|
}
|
|
|
|
app.UseStaticFiles();
|
|
app.UseHttpsRedirection();
|
|
app.UseRouting();
|
|
app.UseSession();
|
|
app.UseAuthorization();
|
|
app.MapRazorPages();
|
|
app.MapControllers();
|
|
|
|
return app;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加动态接口
|
|
/// </summary>
|
|
/// <param name="builder"></param>
|
|
/// <param name="option"></param>
|
|
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());
|
|
});
|
|
}
|
|
} |