using Microsoft.Extensions.DependencyInjection; namespace Hyperbar.Widget; public class WidgetExtensionHandler(IServiceProvider provider, IPublisher publisher, IProxyServiceCollection typedServices) : INotificationHandler> { public async Task Handle(Create args, CancellationToken cancellationToken) { if(args.Value is WidgetExtension widgetExtension) { IWidgetBuilder builder = widgetExtension.Widget.Create(); builder.ConfigureServices(args => { args.AddSingleton(widgetExtension.Assembly); args.AddTransient(_ => provider.GetRequiredService>()); args.AddTransient(_ => provider.GetRequiredService>()); args.AddRange(typedServices.Services); }); IWidgetHost host = builder.Build(); await publisher.PublishAsync(new Create(host), cancellationToken); } } }