using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input.Platform; using Avalonia.Markup.Xaml; using JdeScoping.ConfigManager.Core.DependencyInjection; using JdeScoping.ConfigManager.Ui.Services; using JdeScoping.ConfigManager.Ui.ViewModels; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace JdeScoping.ConfigManager.Ui; public partial class App : Avalonia.Application { /// /// Gets the dependency injection service provider for the application. /// 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 Views.MainWindow { DataContext = Services.GetRequiredService() }; } base.OnFrameworkInitializationCompleted(); } private void ConfigureServices(IServiceCollection services) { // Logging services.AddLogging(builder => builder .AddConsole() .SetMinimumLevel(LogLevel.Debug)); // Add all ConfigManager.Core services services.AddConfigManagerCore(); // Platform Services (Avalonia-specific) services.AddSingleton(sp => new AvaloniaDialogService(GetMainWindow)); services.AddSingleton(sp => new AvaloniaClipboardService(GetClipboard)); // ViewModels services.AddTransient(); } private Window? GetMainWindow() { return (ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow; } private IClipboard? GetClipboard() { return GetMainWindow()?.Clipboard; } }