Базовая работа на Linux

This commit is contained in:
2026-06-04 19:24:08 +03:00
parent 72a5392a73
commit e07fc408eb
37 changed files with 1632 additions and 80 deletions

View File

@@ -1,11 +1,22 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Sms.Environment;
using Sms.Environment.Linux;
using Sms.Environment.Windows;
using Sms.TaskTwo.Avalonia.Views;
using Sms.TaskTwo.Core.DependencyInjection;
using Sms.TaskTwo.Core.Logging;
using Sms.TaskTwo.ViewModels;
namespace Sms.TaskTwo.Avalonia;
public partial class App : Application
{
public static IServiceProvider Services { get; private set; } = null!;
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
@@ -13,11 +24,44 @@ public partial class App : Application
public override void OnFrameworkInitializationCompleted()
{
Services = ConfigureServices();
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow();
var mainViewModel = Services.GetRequiredService<MainWindowViewModel>();
desktop.MainWindow = new MainWindow(mainViewModel);
desktop.ShutdownRequested += OnShutdownRequested;
}
base.OnFrameworkInitializationCompleted();
}
}
private static void OnShutdownRequested(object? sender, ShutdownRequestedEventArgs e)
{
if (Services.GetService<ConsoleLog>() is IDisposable log)
{
log.Dispose();
}
}
private static IServiceProvider ConfigureServices()
{
var configuration = new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
var services = new ServiceCollection();
services.AddSingleton<IConfiguration>(configuration);
services.AddSingleton<IEnvironmentVariableStore>(CreateEnvironmentStore);
services.AddTaskTwoCore(configuration);
services.AddSingleton<MainWindowViewModel>();
return services.BuildServiceProvider();
}
private static IEnvironmentVariableStore CreateEnvironmentStore(IServiceProvider _) =>
OperatingSystem.IsWindows()
? new WindowsEnvironmentVariableStore()
: new LinuxEnvironmentVariableStore();
}