using Microsoft.Extensions.DependencyInjection; namespace Hyperbar.Widget; public class WidgetHandler(IProxyServiceCollection typedServices, IServiceProvider provider, IMediator mediator) : INotificationHandler> { public async Task Handle(Created notification, CancellationToken cancellationToken) { if(notification.Value is IWidget widget) { IWidgetBuilder builder = widget.Create(); builder.ConfigureServices(args => { args.AddTransient(_ => provider.GetRequiredService>()); args.AddRange(typedServices.Services); }); IWidgetHost host = builder.Build(); await host.InitializeAsync(); await mediator.PublishAsync(new Created(host), cancellationToken); } } }