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
|
||||
// PluginLifecycle.LoadAsync on the framework thread.
|
||||
services.AddSingleton(sp => new Ui.Windows.SettingsWindow(
|
||||
|
||||
Reference in New Issue
Block a user