Dipper/Dipper.Alioth/Web/ServiceExtension.cs

69 lines
2.0 KiB
C#
Raw Normal View History

2022-11-06 22:42:32 +08:00
using Dipper.Alioth.Options;
2022-11-27 17:23:54 +08:00
using Dipper.Alioth.Providers;
using Dipper.Alioth.Starlets;
2022-11-06 22:42:32 +08:00
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;
2022-11-27 17:23:54 +08:00
public static class ServiceExtension
2022-11-06 22:42:32 +08:00
{
2022-11-27 17:23:54 +08:00
public static WebApplicationBuilder AddStarApp(this WebApplicationBuilder builder, Action<StarOption>? action = null)
2022-11-06 22:42:32 +08:00
{
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
var option = new StarOption();
action?.Invoke(option);
2022-11-27 17:23:54 +08:00
builder.Services.AddControllers(options =>
2022-11-06 22:42:32 +08:00
{
options.EnableEndpointRouting = false;
option.MvcOption?.Invoke(options);
})
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
option.JsonOption?.Invoke(options);
2022-11-27 17:23:54 +08:00
})
.AddFlexibleApi(option);
2022-11-06 22:42:32 +08:00
return builder;
}
2022-11-27 17:23:54 +08:00
public static WebApplication UseStarApp(this WebApplication app)
2022-11-06 22:42:32 +08:00
{
2022-11-09 22:06:06 +08:00
2022-11-06 22:42:32 +08:00
app.UseStaticFiles();
app.UseHttpsRedirection();
app.UseRouting();
app.MapControllers();
return app;
}
2022-11-09 22:06:06 +08:00
/// <summary>
/// 添加动态接口
/// </summary>
/// <param name="builder"></param>
/// <param name="option"></param>
2022-11-27 17:23:54 +08:00
private static void AddFlexibleApi(this IMvcBuilder builder, StarOption option)
2022-11-06 22:42:32 +08:00
{
builder.ConfigureApplicationPartManager(manager =>
{
2022-11-27 17:23:54 +08:00
manager.ApplicationParts.Add(new AssemblyPart(typeof(IStarlet).Assembly));
2022-11-06 22:42:32 +08:00
2022-11-27 17:23:54 +08:00
foreach (var module in option.Asterisms)
2022-11-06 22:42:32 +08:00
{
module.Initialize();
var assembly = module.GetType().Assembly;
manager.ApplicationParts.Add(new AssemblyPart(assembly));
}
2022-11-27 17:23:54 +08:00
manager.FeatureProviders.Add(new ApiFeatureProvider());
2022-11-06 22:42:32 +08:00
});
}
}