using System.Windows; using CursorLang.Services; using CursorLang.ViewModels; using CursorLang.Views; using Microsoft.Extensions.DependencyInjection; namespace CursorLang; /// /// Композиционный корень: собирает контейнер и запускает главное окно. /// 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.Show(); _services.GetRequiredService().Start(); } protected override void OnExit(ExitEventArgs e) { // Контейнер сам остановит таймеры и закроет окно подсказки _services?.Dispose(); base.OnExit(e); } private static void ConfigureServices(IServiceCollection services) { services.AddSingleton(new KeyboardLayoutOptions()); services.AddSingleton(new PopupOptions()); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); } }