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() =>
|
public IWidgetBuilder Create() =>
|
||||||
WidgetBuilder<ContextualWidgetConfiguration>.Configure(args =>
|
WidgetBuilder<ContextualWidgetConfiguration>.Configure(args =>
|
||||||
{
|
{
|
||||||
args.Id = Guid.Parse("d3030852-8d4a-4fbb-9aa5-96dff3dfa06c");
|
|
||||||
args.Name = "Contextual commands";
|
args.Name = "Contextual commands";
|
||||||
|
|
||||||
}).ConfigureServices(args =>
|
}).ConfigureServices(args =>
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ public class MediaControllerWidget :
|
|||||||
public IWidgetBuilder Create() =>
|
public IWidgetBuilder Create() =>
|
||||||
WidgetBuilder<MediaControllerWidgetConfiguration>.Configure(args =>
|
WidgetBuilder<MediaControllerWidgetConfiguration>.Configure(args =>
|
||||||
{
|
{
|
||||||
args.Id = Guid.Parse("1667a800-ec5a-4d39-aa75-4f5ee95bb9f1");
|
|
||||||
args.Name = "Media controller";
|
args.Name = "Media controller";
|
||||||
}).ConfigureServices(args =>
|
}).ConfigureServices(args =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ public class PrimaryWidget :
|
|||||||
public IWidgetBuilder Create() =>
|
public IWidgetBuilder Create() =>
|
||||||
WidgetBuilder<PrimaryWidgetConfiguration>.Configure(args =>
|
WidgetBuilder<PrimaryWidgetConfiguration>.Configure(args =>
|
||||||
{
|
{
|
||||||
args.Id = Guid.Parse("cfdfe07c-d9d6-4174-ae41-988ca24d2e10");
|
|
||||||
args.Name = "Primary commands";
|
args.Name = "Primary commands";
|
||||||
}).ConfigureServices(services =>
|
}).ConfigureServices(services =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -64,9 +64,6 @@ public partial class App :
|
|||||||
services.AddContentTemplate<WidgetSplitButtonViewModel, WidgetSplitButtonView>();
|
services.AddContentTemplate<WidgetSplitButtonViewModel, WidgetSplitButtonView>();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
//services.AddWidget<MediaControllerWidgetBuilder>();
|
|
||||||
//services.AddWidget<PrimaryWidget>();
|
|
||||||
|
|
||||||
//services.AddTransient(provider =>
|
//services.AddTransient(provider =>
|
||||||
//{
|
//{
|
||||||
// static IEnumerable<WidgetContainerViewModel> Resolve(IServiceProvider services)
|
// static IEnumerable<WidgetContainerViewModel> Resolve(IServiceProvider services)
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
namespace Hyperbar;
|
namespace Hyperbar;
|
||||||
|
|
||||||
public interface IWidgetHost
|
public interface IWidgetHost :
|
||||||
|
IInitializer
|
||||||
{
|
{
|
||||||
IServiceProvider Services { get; }
|
IServiceProvider Services { get; }
|
||||||
|
|
||||||
Task StartAsync();
|
|
||||||
|
|
||||||
Task StopAsync();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,8 +28,11 @@ public class WidgetBuilder<TConfiguration>(TConfiguration configuration) :
|
|||||||
|
|
||||||
services.AddScoped<IMediator, Mediator>();
|
services.AddScoped<IMediator, Mediator>();
|
||||||
services.AddScoped<IDisposer, Disposer>();
|
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)
|
public static IWidgetBuilder Configure(Action<TConfiguration> configurationDelegate)
|
||||||
@@ -44,13 +47,13 @@ public class WidgetBuilder<TConfiguration>(TConfiguration configuration) :
|
|||||||
{
|
{
|
||||||
IHost host = hostBuilder.Build();
|
IHost host = hostBuilder.Build();
|
||||||
|
|
||||||
if (host.Services.GetRequiredService<IConfigurationInitializer<TConfiguration>>()
|
//if (host.Services.GetRequiredService<IConfigurationInitializer<TConfiguration>>()
|
||||||
is IConfigurationInitializer<TConfiguration> configurationInitializer)
|
// is IConfigurationInitializer<TConfiguration> configurationInitializer)
|
||||||
{
|
//{
|
||||||
configurationInitializer.InitializeAsync()
|
// configurationInitializer.InitializeAsync()
|
||||||
.GetAwaiter()
|
// .GetAwaiter()
|
||||||
.GetResult();
|
// .GetResult();
|
||||||
}
|
//}
|
||||||
|
|
||||||
return (IWidgetHost)ActivatorUtilities.CreateInstance(host.Services,
|
return (IWidgetHost)ActivatorUtilities.CreateInstance(host.Services,
|
||||||
typeof(WidgetHost), host);
|
typeof(WidgetHost), host);
|
||||||
|
|||||||
@@ -1,19 +1,16 @@
|
|||||||
namespace Hyperbar;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
//public interface IWidgetConfiguration
|
namespace Hyperbar;
|
||||||
//{
|
|
||||||
// Guid Id { get; set; }
|
|
||||||
|
|
||||||
// string? Name { get; set; }
|
public class WidgetConfiguration
|
||||||
|
|
||||||
// string? Description { get; set; }
|
|
||||||
//}
|
|
||||||
|
|
||||||
public abstract 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? 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();
|
IWidgetHost host = builder.Build();
|
||||||
|
await host.InitializeAsync();
|
||||||
|
|
||||||
await host.StartAsync();
|
|
||||||
await mediator.PublishAsync(new Created<IWidgetHost>(host),
|
await mediator.PublishAsync(new Created<IWidgetHost>(host),
|
||||||
cancellationToken);
|
cancellationToken);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,24 +2,22 @@
|
|||||||
|
|
||||||
namespace Hyperbar;
|
namespace Hyperbar;
|
||||||
public class WidgetHost(IHost host,
|
public class WidgetHost(IHost host,
|
||||||
|
IEnumerable<IInitializer> initializers,
|
||||||
IProxyService<IMediator> proxyMediator) :
|
IProxyService<IMediator> proxyMediator) :
|
||||||
IWidgetHost
|
IWidgetHost
|
||||||
{
|
{
|
||||||
public IServiceProvider Services => host.Services;
|
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)
|
||||||
{
|
//{
|
||||||
if (proxyMediator.Proxy is IMediator mediator)
|
// await mediator.PublishAsync(new Started<IWidgetHost>(this));
|
||||||
{
|
//}
|
||||||
await mediator.SendAsync(new Started<IWidgetHost>(this));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,7 +7,9 @@ public class WidgetHostHander :
|
|||||||
public Task Handle(Started<IWidgetHost> notification,
|
public Task Handle(Started<IWidgetHost> notification,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
// throw new NotImplementedException();
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task Handle(Stopped<IWidgetHost> notification,
|
public Task Handle(Stopped<IWidgetHost> notification,
|
||||||
|
|||||||
Reference in New Issue
Block a user