68 lines
2.2 KiB
C#
68 lines
2.2 KiB
C#
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);
|
|
}
|
|
|
|
public override void OnFrameworkInitializationCompleted()
|
|
{
|
|
Services = ConfigureServices();
|
|
|
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
|
{
|
|
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();
|
|
}
|