Files
sms-task-two/src/Sms.TaskTwo.Avalonia/App.axaml.cs

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