Files
Hyperbar/Hyperbar.Widget/WidgetExtensionHandler.cs
T
2024-02-13 22:11:29 +00:00

31 lines
1.1 KiB
C#

using Microsoft.Extensions.DependencyInjection;
namespace Hyperbar.Widget;
public class WidgetExtensionHandler(IServiceProvider provider,
IPublisher publisher,
IProxyServiceCollection<IWidgetBuilder> typedServices) :
INotificationHandler<Create<WidgetExtension>>
{
public async Task Handle(Create<WidgetExtension> 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<IProxyService<IPublisher>>());
args.AddTransient(_ => provider.GetRequiredService<IProxyService<INavigationTargetProvider>>());
args.AddRange(typedServices.Services);
});
IWidgetHost host = builder.Build();
await publisher.PublishAsync(new Create<IWidgetHost>(host),
cancellationToken);
}
}
}