feat: move mainwindow to core and add NavigationService

This commit is contained in:
2026-02-19 13:13:57 +03:00
parent 9cf8d7c909
commit 35e2397a29
8 changed files with 124 additions and 56 deletions
+38 -21
View File
@@ -5,6 +5,9 @@ using Avalonia.Threading;
using GSS2.Test.ViewModels;
using GSS2.Test.Views;
using GSS2.UI.Core;
using GSS2.UI.Core.Services;
using GSS2.UI.Core.ViewModels;
namespace GSS2.Test;
@@ -20,30 +23,44 @@ public partial class App : Application
if (ApplicationLifetime is null)
throw new InvalidOperationException("Application framework initialization cannot be fulfilled, ApplicationLifetime is null");
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
Console.WriteLine("Application running in classic style");
desktop.Startup += (_, _) => Program.ApplicationHost.RunAsync();
desktop.Exit += (_, _) => Program.ApplicationHost.StopAsync();
var loggerFactory = Program.ApplicationHost.Services.GetRequiredService<ILoggerFactory>();
var navigationService = Program.ApplicationHost.Services.GetRequiredService<NavigationService>();
desktop.MainWindow = new MainWindow()
{
DataContext = Program.ApplicationHost.Services.GetRequiredService<MainWindowViewModel>()
};
Program.ShutdownRequested += (_, _) => Dispatcher.UIThread.Invoke(() => desktop.MainWindow.Close());
}
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView)
switch (ApplicationLifetime)
{
Console.WriteLine("Application running in single view style");
var loggerFactory = Program.ApplicationHost.Services.GetRequiredService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger<MainView>();
singleView.MainView = new MainView(logger)
{
DataContext = Program.ApplicationHost.Services.GetRequiredService<MainViewModel>()
};
case IClassicDesktopStyleApplicationLifetime desktop:
Console.WriteLine("Application running in classic style");
desktop.Startup += (_, _) => Program.ApplicationHost.RunAsync();
desktop.Exit += (_, _) => Program.ApplicationHost.StopAsync();
var mainWindowViewModelLogger = loggerFactory.CreateLogger<MainWindowViewModel>();
var mainWindow = new MainWindow()
{
DataContext = new MainWindowViewModel(mainWindowViewModelLogger)
};
desktop.MainWindow = mainWindow;
Program.ShutdownRequested += (_, _) => Dispatcher.UIThread.Invoke(() => desktop.MainWindow?.Close());
break;
case ISingleViewApplicationLifetime singleView:
Console.WriteLine("Application running in single view style");
break;
default:
throw new InvalidOperationException($"Application framework initialization cannot be fulfilled, ApplicationLifetime has unknown type inherited from: {string.Join(", ", ApplicationLifetime.GetType().GetInterfaces().Select(i => i.FullName))}");
}
else
throw new InvalidOperationException($"Application framework initialization cannot be fulfilled, ApplicationLifetime has unknown type inherited from: {string.Join(", ", ApplicationLifetime.GetType().GetInterfaces().Select(i => i.FullName))}");
var mainViewLogger = loggerFactory.CreateLogger<MainView>();
var mainView = new MainView(mainViewLogger)
{
DataContext = Program.ApplicationHost.Services.GetRequiredService<MainViewModel>()
};
navigationService.NavigateTo(mainView);
base.OnFrameworkInitializationCompleted();
}
}