using Hyperbar.Extensions; using Hyperbar.Windows.Interop; using Hyperbar.Windows.Primary; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; namespace Hyperbar.Windows { public static class IServiceCollectionExtensions { public static IServiceCollection AddWidgetProvider(this IServiceCollection services) where TWidgetProvider : IWidgetProvider, new() { TWidgetProvider builder = new(); IHost? host = new HostBuilder() .UseContentRoot(AppContext.BaseDirectory) .ConfigureAppConfiguration(config => { config.SetBasePath(AppContext.BaseDirectory); config.AddJsonFile("Settings.json", true, true); config.Build(); }) .ConfigureServices((context, isolatedServices) => { isolatedServices.AddHostedService(); isolatedServices.AddSingleton(provider => new ServiceFactory((type, parameters) => ActivatorUtilities.CreateInstance(provider, type, parameters!))); isolatedServices.AddSingleton(); isolatedServices.AddSingleton(); isolatedServices.AddHandler(); isolatedServices.AddTransient(); isolatedServices.AddContentTemplate(); isolatedServices.AddTransient(); isolatedServices.AddTransient(); builder.Create(context, isolatedServices); }).Build(); services.AddTransient(provider => new WidgetContext(host.Services)); host.Start(); var d = host.Services.GetService>(); return services; } } }