using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace IBKRTrader.Core.Modularity; /// /// Vertrag für ein IBKRTrader-Modul. Module referenzieren nur den Core, niemals einander. /// Ein Modul kapselt einen eigenständigen Funktionsbereich (z. B. eine Trading-Strategie) /// mit eigenen Services, Jobs, DB-Objekten sowie eigenen UI-Ansichten. /// /// Vorbild: PolytraderSharp IPolyTraderModule. /// public interface IModule { /// Eindeutiger Anzeigename des Moduls, z. B. "CongressTrading". string Name { get; } /// DB-Präfix für die Objekte des Moduls (z. B. "ct_"), damit sich Module nicht überschneiden. string DbPrefix { get; } /// /// Registriert Services/Jobs des Moduls im DI-Container. Wird beim App-Start aufgerufen, /// bevor der Host gebaut wird. /// void RegisterServices(IServiceCollection services, IConfiguration configuration); /// /// Registriert die UI-Ansichten des Moduls bei der Shell (Launcher). Die Shell öffnet jede Ansicht /// auf Wunsch in einem eigenen Fenster; Module liefern eigene Forms, die Shell bleibt modul-agnostisch. /// void RegisterUi(IModuleUiHost host, IServiceProvider services); /// /// Optionale Vorab-Prüfung, ob das Modul aktiviert werden kann. Gibt null zurück, wenn /// aktivierbar, sonst einen kurzen Grund (z. B. „IBKR-Gateway nicht konfiguriert"). /// string? GetActivationBlocker(IConfiguration configuration) => null; /// Wird nach der Core-Initialisierung gestartet (kein Anlaufen gegen leeren State). Task StartAsync(CancellationToken cancellationToken); Task StopAsync(CancellationToken cancellationToken); }