Improved handling of moonlight plugins during startup, minimized host project code and moved startup handling to core

This commit is contained in:
2026-02-18 15:36:45 +01:00
parent 627e9bb161
commit c45e177001
12 changed files with 135 additions and 68 deletions

View File

@@ -1,11 +0,0 @@
using Microsoft.AspNetCore.Builder;
using SimplePlugin.Abstractions;
namespace Moonlight.Api.Startup;
public interface IAppStartup : IPluginModule
{
public void PreBuild(WebApplicationBuilder builder);
public void PostBuild(WebApplication application);
public void PostMiddleware(WebApplication application);
}

View File

@@ -16,16 +16,19 @@ namespace Moonlight.Api.Startup;
public partial class Startup
{
private static void AddBase(WebApplicationBuilder builder)
private void AddBase(WebApplicationBuilder builder)
{
// Create the base directory
Directory.CreateDirectory("storage");
// Hook up source-generated serialization
builder.Services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.TypeInfoResolverChain.Add(SerializationContext.Default);
});
// Hook up source-generated serialization and add controllers
builder.Services
.AddControllers()
.AddApplicationPart(typeof(Startup).Assembly)
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.TypeInfoResolverChain.Add(SerializationContext.Default);
});
// Configure logging
builder.Logging.ClearProviders();
@@ -53,10 +56,10 @@ public partial class Startup
// Container Helper Options
builder.Configuration.GetSection("Moonlight:ContainerHelper").Bind(builder.Configuration);
builder.Services.AddOptions<ContainerHelperOptions>().BindConfiguration("Moonlight:ContainerHelper");
builder.Services.AddSingleton<ContainerHelperService>();
builder.Services.AddHttpClient("ContainerHelper", (provider, client) =>
{
var options = provider.GetRequiredService<IOptions<ContainerHelperOptions>>();

View File

@@ -1,12 +1,15 @@
using Microsoft.AspNetCore.Builder;
using System.Reflection;
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Builder;
using Moonlight.Shared.Http;
using SimplePlugin.Abstractions;
namespace Moonlight.Api.Startup;
[PluginModule]
public partial class Startup : IAppStartup
public partial class Startup : MoonlightPlugin
{
public void PreBuild(WebApplicationBuilder builder)
public override void PreBuild(WebApplicationBuilder builder)
{
AddBase(builder);
AddAuth(builder);
@@ -14,13 +17,13 @@ public partial class Startup : IAppStartup
AddCache(builder);
}
public void PostBuild(WebApplication application)
public override void PostBuild(WebApplication application)
{
UseBase(application);
UseAuth(application);
}
public void PostMiddleware(WebApplication application)
public override void PostMiddleware(WebApplication application)
{
MapBase(application);
}