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();
}
}
}