feat(host-factory): register ChunkRenderer + PayloadHandler + Lender (F)
F adds the 3 new DI registrations needed for the v1.7.1 R-Block: - ChunkRenderer (4-param ctor: themes, fonts, logger, gameFunctions) - PayloadHandler singleton (7-param ctor: themes, ipc, functions, inputBar, mainWindow, chunkRenderer, logger) - Lender<PayloadHandler> factory (closure over sp, constructs a fresh PayloadHandler per Borrow() — used by InputPreview in Sub-Task I) All three use Factory-Lambdas because Lender<T> has an internal ctor and ChunkRenderer/PayloadHandler are internal sealed (ActivatorUtilities can't reflect into internal ctors per [[reference_hellion_chat_di_container_v150]]). MainWindow DI-reg update is deferred to Sub-Task A2 (split per Flo 2026-05-27 to avoid the DI-cycle that would otherwise emerge from the PayloadHandler → MainWindow → MessageList → PayloadHandler graph — cycle resolved via setter-injection on MessageList in G/H). G is next: wires PayloadHandlerInitHostedService.StartAsync to register the AddonLifecycle listener for MoveTooltip and call MessageList. AttachPayloadHandler. H adds the MessageList ChunkRenderer ctor-param + AttachPayloadHandler setter.
This commit is contained in:
@@ -225,6 +225,36 @@ internal static class PluginHostFactory
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Factory-lambdas for ChunkRenderer, PayloadHandler, and Lender<PayloadHandler>
|
||||||
|
// because all three are internal-sealed (ActivatorUtilities can't reflect into
|
||||||
|
// internal ctors) and Lender<T> has an internal ctor by design.
|
||||||
|
services.AddSingleton(sp => new Ui.Components.ChunkRenderer(
|
||||||
|
sp.GetRequiredService<ThemeRegistry>(),
|
||||||
|
sp.GetRequiredService<FontManager>(),
|
||||||
|
sp.GetRequiredService<ILogger<Ui.Components.ChunkRenderer>>(),
|
||||||
|
sp.GetRequiredService<GameFunctions.GameFunctions>()
|
||||||
|
));
|
||||||
|
services.AddSingleton(sp => new PayloadHandler(
|
||||||
|
sp.GetRequiredService<ThemeRegistry>(),
|
||||||
|
sp.GetRequiredService<IpcManager>(),
|
||||||
|
sp.GetRequiredService<GameFunctions.GameFunctions>(),
|
||||||
|
sp.GetRequiredService<Ui.Components.InputBar>(),
|
||||||
|
sp.GetRequiredService<Ui.Windows.MainWindow>(),
|
||||||
|
sp.GetRequiredService<Ui.Components.ChunkRenderer>(),
|
||||||
|
sp.GetRequiredService<ILogger<PayloadHandler>>()
|
||||||
|
));
|
||||||
|
services.AddSingleton(sp => new Lender<PayloadHandler>(() =>
|
||||||
|
new PayloadHandler(
|
||||||
|
sp.GetRequiredService<ThemeRegistry>(),
|
||||||
|
sp.GetRequiredService<IpcManager>(),
|
||||||
|
sp.GetRequiredService<GameFunctions.GameFunctions>(),
|
||||||
|
sp.GetRequiredService<Ui.Components.InputBar>(),
|
||||||
|
sp.GetRequiredService<Ui.Windows.MainWindow>(),
|
||||||
|
sp.GetRequiredService<Ui.Components.ChunkRenderer>(),
|
||||||
|
sp.GetRequiredService<ILogger<PayloadHandler>>()
|
||||||
|
)
|
||||||
|
));
|
||||||
|
|
||||||
// Block C — Windows. WindowSystem.AddWindow is called from
|
// Block C — Windows. WindowSystem.AddWindow is called from
|
||||||
// PluginLifecycle.LoadAsync on the framework thread.
|
// PluginLifecycle.LoadAsync on the framework thread.
|
||||||
services.AddSingleton(sp => new Ui.Windows.SettingsWindow(
|
services.AddSingleton(sp => new Ui.Windows.SettingsWindow(
|
||||||
|
|||||||
Reference in New Issue
Block a user