add uid loading support
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
using System.Reflection;
|
||||
namespace Hyperbar.Widget;
|
||||
namespace Hyperbar.Widget;
|
||||
|
||||
public record WidgetExtension(IWidget Widget, IWidgetAssembly Assembly);
|
||||
@@ -3,8 +3,7 @@
|
||||
namespace Hyperbar.Widget;
|
||||
|
||||
public class WidgetExtensionHandler(IProxyServiceCollection<IWidgetBuilder> typedServices,
|
||||
IServiceProvider provider,
|
||||
IMediator mediator) :
|
||||
IServiceProvider provider) :
|
||||
INotificationHandler<Created<WidgetExtension>>
|
||||
{
|
||||
public async Task Handle(Created<WidgetExtension> notification,
|
||||
@@ -18,14 +17,12 @@ public class WidgetExtensionHandler(IProxyServiceCollection<IWidgetBuilder> type
|
||||
{
|
||||
args.AddSingleton(widgetExtension.Assembly);
|
||||
args.AddTransient(_ => provider.GetRequiredService<IProxyService<IMediator>>());
|
||||
|
||||
args.AddRange(typedServices.Services);
|
||||
});
|
||||
|
||||
IWidgetHost host = builder.Build();
|
||||
await host.InitializeAsync();
|
||||
|
||||
await mediator.PublishAsync(new Created<IWidgetHost>(host),
|
||||
cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,28 +6,26 @@ public class WidgetHost :
|
||||
INotificationHandler<Changed<WidgetAvailability>>,
|
||||
IWidgetHost
|
||||
{
|
||||
private readonly IConfigurationInitializer<WidgetConfiguration> configurationInitializer;
|
||||
private readonly IServiceProvider services;
|
||||
private readonly IEnumerable<IInitializer> initializers;
|
||||
private readonly IMediator mediator;
|
||||
private readonly IProxyService<IMediator> proxyMediator;
|
||||
private readonly IServiceProvider services;
|
||||
|
||||
public WidgetHost(IServiceProvider services,
|
||||
IMediator mediator,
|
||||
IEnumerable<IInitializer> initializers,
|
||||
IProxyService<IMediator> proxyMediator,
|
||||
IConfigurationInitializer<WidgetConfiguration> configurationInitializer)
|
||||
IProxyService<IMediator> proxyMediator)
|
||||
{
|
||||
this.services = services;
|
||||
this.mediator = mediator;
|
||||
this.initializers = initializers;
|
||||
this.proxyMediator = proxyMediator;
|
||||
this.configurationInitializer = configurationInitializer;
|
||||
|
||||
mediator.Subscribe(this);
|
||||
}
|
||||
|
||||
public WidgetConfiguration Configuration => services.GetRequiredService<WidgetConfiguration>();
|
||||
public WidgetConfiguration Configuration =>
|
||||
services.GetRequiredService<WidgetConfiguration>();
|
||||
|
||||
public IServiceProvider Services => services;
|
||||
|
||||
@@ -43,7 +41,13 @@ public class WidgetHost :
|
||||
}
|
||||
}
|
||||
|
||||
public async Task InitializeAsync() => await configurationInitializer.InitializeAsync();
|
||||
public async Task InitializeAsync()
|
||||
{
|
||||
foreach (IInitializer initializer in initializers)
|
||||
{
|
||||
await initializer.InitializeAsync();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task StartAsync()
|
||||
{
|
||||
@@ -51,10 +55,5 @@ public class WidgetHost :
|
||||
{
|
||||
await mediator.PublishAsync(new Started<IWidgetHost>(this));
|
||||
}
|
||||
|
||||
foreach (IInitializer initializer in initializers)
|
||||
{
|
||||
await initializer.InitializeAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user