Dipper/Dipper.Alioth/Extensions/StarletExtension.cs

65 lines
1.9 KiB
C#
Raw Normal View History

2022-11-27 18:05:18 +08:00
namespace Dipper.Alioth.Extensions;
2022-11-06 22:42:32 +08:00
2022-11-27 17:36:19 +08:00
public static class StarletExtension
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 18:05:18 +08:00
manager.FeatureProviders.Add(new Providers.StarletFeatureProvider());
2022-11-06 22:42:32 +08:00
});
2022-11-27 17:36:19 +08:00
builder.Services.Configure<MvcOptions>(options =>
{
options.Conventions.Add(new StarletConvention());
});
2022-11-06 22:42:32 +08:00
}
}