using IBKRTrader.Core.Workers; using Microsoft.Extensions.DependencyInjection; namespace IBKRTrader.Core.Modules; /// /// Vertrag für ein eigenständiges Trading-Modul. /// /// Architektur-Regel: Der Core kennt konkrete Module NICHT. Module hängen sich /// ausschließlich über diesen Vertrag und den DI-Container ein /// (Abhängigkeit nur Modul → Core, niemals umgekehrt). /// /// Lebenszyklus: /// 1. – vor dem Bauen des DI-Containers /// 2. – beim App-Start (Migrationen etc.) /// 3. – Worker werden der WorkerEngine übergeben /// 4. – Launcher öffnet das Modul-Fenster /// public interface IModule { /// Eindeutiges Modul-Kürzel, zugleich DB-Tabellen-Präfix (z. B. "CT"). string Key { get; } /// Anzeigename im Launcher (z. B. "Congress Trading"). string DisplayName { get; } /// Kurzbeschreibung der Strategie für den Launcher. string Description { get; } /// Modul-Version. string Version { get; } /// Registriert alle Modul-Services im DI-Container (vor dem Build). void RegisterServices(IServiceCollection services); /// Führt Modul-Migrationen und einmalige Initialisierung aus (beim Start). Task InitializeAsync(IServiceProvider provider); /// Liefert die Worker/Services des Moduls für die WorkerEngine. IEnumerable GetWorkers(IServiceProvider provider); /// Erzeugt das eigenständige Fenster des Moduls (vom Launcher geöffnet). Form CreateWindow(IServiceProvider provider); }