using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.UI.Xaml; using RustTools.Activation; using RustTools.Contracts.Services; using RustTools.Core.Contracts.Services; using RustTools.Core.Services; using RustTools.Helpers; using RustTools.Models; using RustTools.Services; using RustTools.ViewModels; using RustTools.Views; namespace RustTools; // To learn more about WinUI 3, see https://docs.microsoft.com/windows/apps/winui/winui3/. public partial class App : Application { // The .NET Generic Host provides dependency injection, configuration, logging, and other services. // https://docs.microsoft.com/dotnet/core/extensions/generic-host // https://docs.microsoft.com/dotnet/core/extensions/dependency-injection // https://docs.microsoft.com/dotnet/core/extensions/configuration // https://docs.microsoft.com/dotnet/core/extensions/logging public IHost Host { get; } public static T GetService() where T : class { if ((App.Current as App)!.Host.Services.GetService(typeof(T)) is not T service) { throw new ArgumentException($"{typeof(T)} needs to be registered in ConfigureServices within App.xaml.cs."); } return service; } public static WindowEx MainWindow { get; } = new MainWindow(); public static UIElement? AppTitlebar { get; set; } public App() { InitializeComponent(); Host = Microsoft.Extensions.Hosting.Host. CreateDefaultBuilder(). UseContentRoot(AppContext.BaseDirectory). ConfigureServices((context, services) => { // Default Activation Handler services.AddTransient, DefaultActivationHandler>(); // Other Activation Handlers // Services services.AddSingleton(); services.AddSingleton(); services.AddTransient(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); // Core Services services.AddSingleton(); // Views and ViewModels services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); // Configuration services.Configure(context.Configuration.GetSection(nameof(LocalSettingsOptions))); }). Build(); UnhandledException += App_UnhandledException; } private void App_UnhandledException(object sender, Microsoft.UI.Xaml.UnhandledExceptionEventArgs e) { // TODO: Log and handle exceptions as appropriate. // https://docs.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.application.unhandledexception. } protected async override void OnLaunched(LaunchActivatedEventArgs args) { base.OnLaunched(args); await App.GetService().ActivateAsync(args); } }