using Ghost.Data.Services; using Ghost.Editor.Helpers; using Ghost.Editor.View.Windows; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.UI.Xaml; using System; // To learn more about WinUI, the WinUI project structure, // and more about our project templates, see: http://aka.ms/winui-project-info. namespace Ghost.Editor { /// /// Provides application-specific behavior to supplement the default Application class. /// public partial class App : Application { private Window? _window; internal IHost Host { get; } /// /// Initializes the singleton application object. This is the first line of authored code /// executed, and as such is the logical equivalent of main() or WinMain(). /// internal App() { InitializeComponent(); Host = Microsoft.Extensions.Hosting.Host. CreateDefaultBuilder(). UseContentRoot(AppContext.BaseDirectory). ConfigureServices((context, services) => { services.AddSingleton(); HostHelper.SetupPageService(context, services); }) .Build(); } internal static Window? GetWindow() { return (Current as App)?._window; } internal static void SetWindow(Window window) { if (Current is App app) { app._window = window; } } internal static T GetService() where T : class { if ((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; } /// /// Invoked when the application is launched. /// /// Details about the launch request and process. protected override void OnLaunched(LaunchActivatedEventArgs args) { base.OnLaunched(args); ActivationHandler.Handle(args); Host.Start(); _window = GetService(); _window.Activate(); } } }