Refactor widget configuration so only the very low configuration gets written first. The actual configuration are only to be written once the widget has been turned on by the user
This commit is contained in:
@@ -8,7 +8,6 @@ public class ContextualWidget :
|
||||
public IWidgetBuilder Create() =>
|
||||
WidgetBuilder<ContextualWidgetConfiguration>.Configure(args =>
|
||||
{
|
||||
args.Id = Guid.Parse("d3030852-8d4a-4fbb-9aa5-96dff3dfa06c");
|
||||
args.Name = "Contextual commands";
|
||||
|
||||
}).ConfigureServices(args =>
|
||||
|
||||
@@ -10,7 +10,6 @@ public class MediaControllerWidget :
|
||||
public IWidgetBuilder Create() =>
|
||||
WidgetBuilder<MediaControllerWidgetConfiguration>.Configure(args =>
|
||||
{
|
||||
args.Id = Guid.Parse("1667a800-ec5a-4d39-aa75-4f5ee95bb9f1");
|
||||
args.Name = "Media controller";
|
||||
}).ConfigureServices(args =>
|
||||
{
|
||||
|
||||
@@ -9,7 +9,6 @@ public class PrimaryWidget :
|
||||
public IWidgetBuilder Create() =>
|
||||
WidgetBuilder<PrimaryWidgetConfiguration>.Configure(args =>
|
||||
{
|
||||
args.Id = Guid.Parse("cfdfe07c-d9d6-4174-ae41-988ca24d2e10");
|
||||
args.Name = "Primary commands";
|
||||
}).ConfigureServices(services =>
|
||||
{
|
||||
|
||||
@@ -64,9 +64,6 @@ public partial class App :
|
||||
services.AddContentTemplate<WidgetSplitButtonViewModel, WidgetSplitButtonView>();
|
||||
}));
|
||||
|
||||
//services.AddWidget<MediaControllerWidgetBuilder>();
|
||||
//services.AddWidget<PrimaryWidget>();
|
||||
|
||||
//services.AddTransient(provider =>
|
||||
//{
|
||||
// static IEnumerable<WidgetContainerViewModel> Resolve(IServiceProvider services)
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
namespace Hyperbar;
|
||||
|
||||
public interface IWidgetHost
|
||||
public interface IWidgetHost :
|
||||
IInitializer
|
||||
{
|
||||
IServiceProvider Services { get; }
|
||||
|
||||
Task StartAsync();
|
||||
|
||||
Task StopAsync();
|
||||
}
|
||||
|
||||
@@ -28,8 +28,11 @@ public class WidgetBuilder<TConfiguration>(TConfiguration configuration) :
|
||||
|
||||
services.AddScoped<IMediator, Mediator>();
|
||||
services.AddScoped<IDisposer, Disposer>();
|
||||
services.AddHandler<WidgetConfigurationHandler>();
|
||||
|
||||
services.AddConfiguration(configuration);
|
||||
//services.AddConfiguration(configuration);
|
||||
services.AddConfiguration<WidgetConfiguration>(section: configuration.GetType().Name,
|
||||
configuration: configuration);
|
||||
});
|
||||
|
||||
public static IWidgetBuilder Configure(Action<TConfiguration> configurationDelegate)
|
||||
@@ -44,13 +47,13 @@ public class WidgetBuilder<TConfiguration>(TConfiguration configuration) :
|
||||
{
|
||||
IHost host = hostBuilder.Build();
|
||||
|
||||
if (host.Services.GetRequiredService<IConfigurationInitializer<TConfiguration>>()
|
||||
is IConfigurationInitializer<TConfiguration> configurationInitializer)
|
||||
{
|
||||
configurationInitializer.InitializeAsync()
|
||||
.GetAwaiter()
|
||||
.GetResult();
|
||||
}
|
||||
//if (host.Services.GetRequiredService<IConfigurationInitializer<TConfiguration>>()
|
||||
// is IConfigurationInitializer<TConfiguration> configurationInitializer)
|
||||
//{
|
||||
// configurationInitializer.InitializeAsync()
|
||||
// .GetAwaiter()
|
||||
// .GetResult();
|
||||
//}
|
||||
|
||||
return (IWidgetHost)ActivatorUtilities.CreateInstance(host.Services,
|
||||
typeof(WidgetHost), host);
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
namespace Hyperbar;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
//public interface IWidgetConfiguration
|
||||
//{
|
||||
// Guid Id { get; set; }
|
||||
namespace Hyperbar;
|
||||
|
||||
// string? Name { get; set; }
|
||||
|
||||
// string? Description { get; set; }
|
||||
//}
|
||||
|
||||
public abstract class WidgetConfiguration
|
||||
public class WidgetConfiguration
|
||||
{
|
||||
public Guid Id { get; set; } = Guid.NewGuid();
|
||||
public string? Description { get; set; }
|
||||
|
||||
[JsonInclude]
|
||||
internal Guid Id { get; set; } = Guid.NewGuid();
|
||||
|
||||
public string? Name { get; set; }
|
||||
|
||||
public string? Description { get; set; }
|
||||
[JsonInclude]
|
||||
internal bool IsAvailable { get; set; }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace Hyperbar;
|
||||
|
||||
public class WidgetConfigurationHandler :
|
||||
INotificationHandler<ConfigurationChanged<WidgetConfiguration>>
|
||||
{
|
||||
public Task Handle(ConfigurationChanged<WidgetConfiguration> notification,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
@@ -21,8 +21,8 @@ public class WidgetHandler(IProxyServiceCollection<IWidgetBuilder> typedServices
|
||||
});
|
||||
|
||||
IWidgetHost host = builder.Build();
|
||||
await host.InitializeAsync();
|
||||
|
||||
await host.StartAsync();
|
||||
await mediator.PublishAsync(new Created<IWidgetHost>(host),
|
||||
cancellationToken);
|
||||
}
|
||||
|
||||
@@ -2,24 +2,22 @@
|
||||
|
||||
namespace Hyperbar;
|
||||
public class WidgetHost(IHost host,
|
||||
IEnumerable<IInitializer> initializers,
|
||||
IProxyService<IMediator> proxyMediator) :
|
||||
IWidgetHost
|
||||
{
|
||||
public IServiceProvider Services => host.Services;
|
||||
|
||||
public async Task StartAsync()
|
||||
public async Task InitializeAsync()
|
||||
{
|
||||
if (proxyMediator.Proxy is IMediator mediator)
|
||||
foreach (IInitializer initializer in initializers)
|
||||
{
|
||||
await mediator.PublishAsync(new Started<IWidgetHost>(this));
|
||||
}
|
||||
await initializer.InitializeAsync();
|
||||
}
|
||||
|
||||
public async Task StopAsync()
|
||||
{
|
||||
if (proxyMediator.Proxy is IMediator mediator)
|
||||
{
|
||||
await mediator.SendAsync(new Started<IWidgetHost>(this));
|
||||
}
|
||||
//if (proxyMediator.Proxy is IMediator mediator)
|
||||
//{
|
||||
// await mediator.PublishAsync(new Started<IWidgetHost>(this));
|
||||
//}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,9 @@ public class WidgetHostHander :
|
||||
public Task Handle(Started<IWidgetHost> notification,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
// throw new NotImplementedException();
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task Handle(Stopped<IWidgetHost> notification,
|
||||
|
||||
Reference in New Issue
Block a user