using Hyperbar.Extensions; using Hyperbar.Widget.Contextual; using Hyperbar.Windows.Controls; using Hyperbar.Windows.Primary; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; 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); 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.AddHostedService(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddContentTemplate(); services.AddWidgetProvider(); services.AddWidgetProvider(); services.AddTransient(provider => { static IEnumerable Resolve(IServiceProvider services) { foreach (IWidgetContext widgetContext in services.GetServices()) { if (widgetContext.ServiceProvider.GetService() is IWidgetViewModel viewModel) { yield return viewModel; } } } return Resolve(provider); }); }) .Build(); await host.RunAsync(); } }