using Hyperbar.Extensions; using Hyperbar.Windows.Interop; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; 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() .ConfigureServices(isolatedServices => { 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(isolatedServices); }).Build(); services.AddTransient(provider => new WidgetContext(host.Services)); return services; } } }