add uid loading support

This commit is contained in:
TheXamlGuy
2024-01-27 20:28:40 +00:00
parent 640b3292b2
commit 9f6cc35bc1
23 changed files with 147 additions and 99 deletions
+1 -2
View File
@@ -1,4 +1,3 @@
using System.Reflection;
namespace Hyperbar.Widget;
namespace Hyperbar.Widget;
public record WidgetExtension(IWidget Widget, IWidgetAssembly Assembly);
+2 -5
View File
@@ -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);
}
}
}
+11 -12
View File
@@ -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();
}
}
}