using Hyperbar.Windows.Controls; using Hyperbar.Windows.Primary; using Hyperbar.Windows.UI; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.UI.Dispatching; using Microsoft.UI.Xaml; namespace Hyperbar.Windows; public partial class App : Application { public App() => InitializeComponent(); protected override async void OnLaunched(LaunchActivatedEventArgs args) { base.OnLaunched(args); DispatcherQueueSynchronizationContext context = new(DispatcherQueue.GetForCurrentThread()); SynchronizationContext.SetSynchronizationContext(context); IHost? host = Host.CreateDefaultBuilder() .UseContentRoot(AppContext.BaseDirectory) .ConfigureAppConfiguration(config => { config.SetBasePath(AppContext.BaseDirectory); config.AddJsonFile("Settings.json", true, true); config.Build(); }) .ConfigureServices((context, services) => { services.AddSingleton(provider => new ServiceFactory((type, parameters) => ActivatorUtilities.CreateInstance(provider, type, parameters!))); services.AddSingleton(); services.AddHostedService(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddContentTemplate(); services.AddWidgetProvider(); services.AddWidgetProvider(); services.AddTransient(provider => { static IEnumerable Resolve(IServiceProvider services) { int index = 0; foreach (IWidgetContext widgetContext in services.GetServices()) { if (widgetContext.ServiceProvider.GetServices() is IEnumerable viewModels) { yield return (WidgetContainerViewModel)ActivatorUtilities.CreateInstance(widgetContext.ServiceProvider, typeof(WidgetContainerViewModel), viewModels, index % 2 == 1); index++; } } } return Resolve(provider); }); }) .Build(); await host.RunAsync(); } }