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:
TheXamlGuy
2024-01-22 22:45:44 +00:00
parent 186d244268
commit 6daaa39b8c
11 changed files with 45 additions and 43 deletions
@@ -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 =>
{
-3
View File
@@ -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)
+2 -5
View File
@@ -1,10 +1,7 @@
namespace Hyperbar;
public interface IWidgetHost
public interface IWidgetHost :
IInitializer
{
IServiceProvider Services { get; }
Task StartAsync();
Task StopAsync();
}
+11 -8
View File
@@ -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);
+9 -12
View File
@@ -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();
}
}
+1 -1
View File
@@ -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);
}
+8 -10
View File
@@ -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));
//}
}
}
+3 -1
View File
@@ -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,