using IBKRTrader.Core.AI; using IBKRTrader.Core.Budget; using IBKRTrader.Core.Database; using IBKRTrader.Core.Database.Migrations; using IBKRTrader.Core.IBKR; using IBKRTrader.Core.Logging; using IBKRTrader.Core.Settings; using IBKRTrader.Core.Trading; using IBKRTrader.Core.Workers; using IBKRTrader.Core.Workers.BuiltIn; using IBKRTrader.Modules.CongressTrading; using Microsoft.Extensions.DependencyInjection; namespace IBKRTrader; internal static class Program { [STAThread] static void Main() { ApplicationConfiguration.Initialize(); // ── DI-Container aufbauen ──────────────────────────────────────────── var services = new ServiceCollection(); // Core: Settings (zuerst laden) var settingsService = new SettingsService(); settingsService.Load(); services.AddSingleton(settingsService); // Core: Logging services.AddSingleton(); // Core: Database services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // Core: IBKR Services services.AddSingleton(); services.AddSingleton(); // Core: Other Services services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // Core: Built-In Worker services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // ── Module registrieren ────────────────────────────────────────────── CongressTradingModule.Register(services); // ── IWorker-Sammlung: Core + Module ────────────────────────────────── services.AddSingleton>(sp => new IWorker[] { // Core-Worker sp.GetRequiredService(), sp.GetRequiredService(), sp.GetRequiredService(), // IBKR Market Data Worker sp.GetRequiredService(), sp.GetRequiredService(), } // Modul-Worker dynamisch anhängen .Concat(CongressTradingModule.GetWorkers(sp)) .ToArray()); services.AddSingleton(); services.AddSingleton(); var provider = services.BuildServiceProvider(); // WebApiService bekommt Engine-Referenz (zirkuläre Abhängigkeit auflösen) var webApi = provider.GetRequiredService(); var engine = provider.GetRequiredService(); webApi.SetEngine(engine); Application.Run(provider.GetRequiredService()); } }