Phase 1: Modul-System formalisiert (IModule + ModuleRegistry)

- Core/Modules/IModule.cs: Vertrag (Key, DisplayName, Description, Version,
  RegisterServices, InitializeAsync, GetWorkers, CreateWindow)
- Core/Modules/ModuleRegistry.cs
- CongressTradingModule auf IModule umgestellt (instanzbasiert, Platzhalter-Fenster)
- Program.cs iteriert ueber IModule[] + Registry; Form1 initialisiert Module ueber Registry
- Testbarkeit: WorkerBase DB-Log-Seam (virtuell); CapitolTradesScraper.ParseTradesFromHtml
  extrahiert (offline gegen ct_raw.html testbar)
- Tests: ModuleRegistry, CongressTradingModule, WorkerBase, CapitolTradesScraper -> 15/15 gruen

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
This commit is contained in:
Richard
2026-07-27 10:07:47 +02:00
parent 9abad277c2
commit af398353f0
13 changed files with 449 additions and 35 deletions
+15 -2
View File
@@ -4,6 +4,7 @@ using IBKRTrader.Core.Database;
using IBKRTrader.Core.Database.Migrations;
using IBKRTrader.Core.IBKR;
using IBKRTrader.Core.Logging;
using IBKRTrader.Core.Modules;
using IBKRTrader.Core.Settings;
using IBKRTrader.Core.Trading;
using IBKRTrader.Core.Workers;
@@ -53,7 +54,19 @@ internal static class Program
services.AddSingleton<IBKRPriceHistoryWorker>();
// ── Module registrieren ──────────────────────────────────────────────
CongressTradingModule.Register(services);
// Der Core kennt konkrete Module nicht: Module werden hier instanziiert,
// hängen ihre Services über IModule.RegisterServices ein und werden über
// die ModuleRegistry zugänglich gemacht.
IModule[] modules =
[
new CongressTradingModule(),
];
foreach (var module in modules)
module.RegisterServices(services);
var moduleRegistry = new ModuleRegistry(modules);
services.AddSingleton(moduleRegistry);
// ── IWorker-Sammlung: Core + Module ──────────────────────────────────
services.AddSingleton<IEnumerable<IWorker>>(sp => new IWorker[]
@@ -67,7 +80,7 @@ internal static class Program
sp.GetRequiredService<IBKRPriceHistoryWorker>(),
}
// Modul-Worker dynamisch anhängen
.Concat(CongressTradingModule.GetWorkers(sp))
.Concat(moduleRegistry.Modules.SelectMany(m => m.GetWorkers(sp)))
.ToArray());
services.AddSingleton<WorkerEngine>();