using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; using JdeScoping.SecureStoreManager.Application; using JdeScoping.SecureStoreManager.Services; using JdeScoping.SecureStoreManager.ViewModels; using JdeScoping.SecureStoreManager.Views; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace JdeScoping.SecureStoreManager; public partial class App : Avalonia.Application { /// /// Gets the service provider instance for dependency injection. /// public static IServiceProvider Services { get; private set; } = null!; /// public override void Initialize() { AvaloniaXamlLoader.Load(this); } /// public override void OnFrameworkInitializationCompleted() { var services = new ServiceCollection(); ConfigureServices(services); Services = services.BuildServiceProvider(); if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { desktop.MainWindow = new MainWindow { DataContext = Services.GetRequiredService() }; } base.OnFrameworkInitializationCompleted(); } private void ConfigureServices(IServiceCollection services) { // Logging services.AddLogging(builder => builder .AddConsole() .SetMinimumLevel(LogLevel.Debug)); // Services services.AddSingleton(); // Platform Services (factory pattern for window access) services.AddSingleton(sp => new AvaloniaDialogService(GetMainWindow)); services.AddSingleton(sp => new AvaloniaClipboardService(() => GetMainWindow()?.Clipboard)); // Use Cases services.AddTransient(); services.AddTransient(); // ViewModels services.AddTransient(); } private Window? GetMainWindow() { return (ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow; } }