Базовая работа на Linux
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user