58 lines
1.9 KiB
C#
58 lines
1.9 KiB
C#
using System.Windows;
|
|
using CursorLang.Models;
|
|
using CursorLang.Services;
|
|
using CursorLang.ViewModels;
|
|
using CursorLang.Views;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace CursorLang;
|
|
|
|
/// <summary>
|
|
/// Композиционный корень: собирает контейнер и запускает окно настроек.
|
|
/// </summary>
|
|
public partial class App : Application
|
|
{
|
|
private ServiceProvider? _services;
|
|
|
|
protected override void OnStartup(StartupEventArgs e)
|
|
{
|
|
base.OnStartup(e);
|
|
|
|
var services = new ServiceCollection();
|
|
ConfigureServices(services);
|
|
_services = services.BuildServiceProvider();
|
|
|
|
MainWindow = _services.GetRequiredService<MainWindow>();
|
|
MainWindow.Show();
|
|
|
|
_services.GetRequiredService<LayoutNotificationCoordinator>().Start();
|
|
}
|
|
|
|
protected override void OnExit(ExitEventArgs e)
|
|
{
|
|
// Контейнер сам остановит таймеры, сохранит настройки
|
|
// и закроет окно подсказки
|
|
_services?.Dispose();
|
|
base.OnExit(e);
|
|
}
|
|
|
|
private static void ConfigureServices(IServiceCollection services)
|
|
{
|
|
services.AddSingleton(new KeyboardLayoutOptions());
|
|
|
|
services.AddSingleton<SettingsService>();
|
|
services.AddSingleton(provider => provider.GetRequiredService<SettingsService>().Load());
|
|
|
|
services.AddSingleton<ILocalizationService, LocalizationService>();
|
|
services.AddSingleton<IKeyboardLayoutService, KeyboardLayoutService>();
|
|
services.AddSingleton<ILayoutPopupService, LayoutPopupService>();
|
|
services.AddSingleton<LayoutNotificationCoordinator>();
|
|
|
|
services.AddSingleton<LayoutPopupViewModel>();
|
|
services.AddSingleton<SettingsViewModel>();
|
|
|
|
services.AddSingleton<LayoutPopupWindow>();
|
|
services.AddSingleton<MainWindow>();
|
|
}
|
|
}
|