using System; using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; using Microsoft.Extensions.DependencyInjection; using PolyTrader.App.Avalonia.Shell; using PolyTrader.App.Avalonia.Views; namespace PolyTrader.App.Avalonia { /// /// Avalonia-Anwendungsobjekt. Hält die Verbindung zwischen dem bereits laufenden Generic Host /// (Trading-Services, Module, Persistenz) und der Oberfläche: beim Start wird der Launcher /// erzeugt und die Views von Core und Modulen werden bei der Shell registriert. /// public partial class App : global::Avalonia.Application { /// /// Wird von vor StartWithClassicDesktopLifetime gesetzt. /// Bewusst statisch: Avalonia erzeugt die Application-Instanz selbst, ein Konstruktor- /// Parameter ist daher nicht möglich. /// public static IServiceProvider? Services { get; set; } public override void Initialize() => AvaloniaXamlLoader.Load(this); public override void OnFrameworkInitializationCompleted() { if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop && Services != null) { // Farbschema aus den Server-Settings übernehmen, BEVOR das erste Fenster entsteht – // sonst blitzt kurz das helle Standardschema auf. var settings = Services.GetRequiredService(); Shell.ThemeManager.Initialize(settings, "server_settings.xml", Services.GetRequiredService()); var uiHost = Services.GetRequiredService(); CoreViews.Register(uiHost, Services); foreach (var module in Services.GetServices()) module.RegisterUi(uiHost, Services); ModuleViews.Register(uiHost, Services); ViewIcons.AssignDefaults(uiHost); var launcher = new LauncherWindow(uiHost, Services); uiHost.SetMainWindow(launcher); desktop.MainWindow = launcher; // Schliessen des Launchers laeuft ueber die Sicherheitsabfrage (wie bisher das X). desktop.ShutdownMode = global::Avalonia.Controls.ShutdownMode.OnMainWindowClose; } base.OnFrameworkInitializationCompleted(); } } }