A widget should have only one IWidgetViewModel by default... wondering whether if we should go for the first served, or throw if multiple detected, or ignore the widget
This commit is contained in:
@@ -5,47 +5,63 @@ using System.Reflection;
|
||||
|
||||
namespace Hyperbar.Widget;
|
||||
|
||||
public class WidgetBuilder<TConfiguration>(TConfiguration configuration) :
|
||||
IWidgetBuilder<TConfiguration>
|
||||
where TConfiguration :
|
||||
WidgetConfiguration,
|
||||
new()
|
||||
public class WidgetBuilder :
|
||||
IWidgetBuilder
|
||||
{
|
||||
private readonly IHostBuilder hostBuilder = new HostBuilder()
|
||||
.UseContentRoot(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||
private readonly IHostBuilder hostBuilder;
|
||||
|
||||
private WidgetBuilder()
|
||||
{
|
||||
hostBuilder = new HostBuilder()
|
||||
.UseContentRoot(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||
Assembly.GetEntryAssembly()?.GetName().Name!), true)
|
||||
.ConfigureAppConfiguration(config =>
|
||||
.ConfigureAppConfiguration(config =>
|
||||
{
|
||||
config.AddJsonFile("Settings.json", true, true);
|
||||
})
|
||||
.ConfigureServices((context, services) =>
|
||||
{
|
||||
services.AddSingleton<IWidgetHost, WidgetHost>();
|
||||
services.AddScoped<IServiceFactory>(provider =>
|
||||
new ServiceFactory((type, parameters) =>
|
||||
ActivatorUtilities.CreateInstance(provider, type, parameters!)));
|
||||
services.AddScoped<IMediator, Mediator>();
|
||||
services.AddScoped<IDisposer, Disposer>();
|
||||
services.AddSingleton<IValue<WidgetAvailability>, Value<WidgetAvailability>>();
|
||||
});
|
||||
}
|
||||
|
||||
public static IWidgetBuilder Create() => new WidgetBuilder();
|
||||
|
||||
public IWidgetBuilder Configuration<TConfiguration>(Action<TConfiguration> configurationDelegate)
|
||||
where TConfiguration :
|
||||
WidgetConfiguration,
|
||||
new()
|
||||
{
|
||||
TConfiguration configuration = new TConfiguration();
|
||||
configurationDelegate(configuration);
|
||||
|
||||
hostBuilder.ConfigureServices(services =>
|
||||
{
|
||||
config.AddJsonFile("Settings.json", true, true);
|
||||
})
|
||||
.ConfigureServices((context, services) =>
|
||||
{
|
||||
services.AddSingleton<IWidgetHost, WidgetHost>();
|
||||
|
||||
services.AddScoped<IServiceFactory>(provider =>
|
||||
new ServiceFactory((type, parameters) =>
|
||||
ActivatorUtilities.CreateInstance(provider, type, parameters!)));
|
||||
services.AddScoped<IMediator, Mediator>();
|
||||
services.AddScoped<IDisposer, Disposer>();
|
||||
|
||||
services.AddSingleton<IValue<WidgetAvailability>,
|
||||
Value<WidgetAvailability>>();
|
||||
|
||||
services.AddHandler<WidgetConfigurationHandler>();
|
||||
|
||||
services.AddConfiguration<WidgetConfiguration>(section: configuration.GetType().Name,
|
||||
configuration: configuration);
|
||||
services.AddConfiguration<WidgetConfiguration>(section: configuration.GetType().Name, configuration: configuration);
|
||||
services.AddConfiguration(configuration);
|
||||
});
|
||||
|
||||
public static IWidgetBuilder Configure(Action<TConfiguration> configurationDelegate)
|
||||
{
|
||||
TConfiguration configuration = new();
|
||||
configurationDelegate(configuration);
|
||||
|
||||
return new WidgetBuilder<TConfiguration>(configuration);
|
||||
return this;
|
||||
}
|
||||
|
||||
public IWidgetBuilder UseViewModelTemplate<TWidgetContent, TWidgetTemplate>()
|
||||
where TWidgetContent :
|
||||
IWidgetViewModel
|
||||
{
|
||||
hostBuilder.ConfigureServices(services =>
|
||||
{
|
||||
services.AddWidgetTemplate<TWidgetContent, TWidgetTemplate>();
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
public IWidgetHost Build()
|
||||
{
|
||||
IHost host = hostBuilder.Build();
|
||||
@@ -54,7 +70,19 @@ public class WidgetBuilder<TConfiguration>(TConfiguration configuration) :
|
||||
|
||||
public IWidgetBuilder ConfigureServices(Action<IServiceCollection> configureDelegate)
|
||||
{
|
||||
hostBuilder.ConfigureServices(configureDelegate.Invoke);
|
||||
hostBuilder.ConfigureServices(configureDelegate);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public IWidgetBuilder UseViewModel<TViewModel>()
|
||||
where TViewModel :
|
||||
IWidgetViewModel
|
||||
{
|
||||
hostBuilder.ConfigureServices(services =>
|
||||
{
|
||||
services.AddWidgetTemplate<TViewModel>();
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user