Improve widget builder

This commit is contained in:
TheXamlGuy
2024-01-19 22:37:12 +00:00
parent 4766ed1156
commit 3a268db79d
16 changed files with 141 additions and 80 deletions
@@ -30,12 +30,24 @@ public static class IServiceCollectionExtensions
}
public static IServiceCollection AddConfiguration<TConfiguration>(this IServiceCollection services)
where TConfiguration :
where TConfiguration :
class, new()
{
return services.AddConfiguration<TConfiguration>(typeof(TConfiguration).Name, "Settings.json", null);
}
public static IServiceCollection AddConfiguration<TConfiguration>(this IServiceCollection services,
Action<TConfiguration> configurationDelegate)
where TConfiguration :
class, new()
{
TConfiguration configuration = new();
configurationDelegate.Invoke(configuration);
return services.AddConfiguration<TConfiguration>(typeof(TConfiguration).Name, "Settings.json",
configuration);
}
public static IServiceCollection AddConfiguration<TConfiguration>(this IServiceCollection services,
TConfiguration? defaults = null)
where TConfiguration :
@@ -8,6 +8,7 @@ public partial class WidgetContainerViewModel(ITemplateFactory templateFactory,
IMediator mediator,
IDisposer disposer,
IEnumerable<IWidgetViewModel> items,
Guid id,
bool alternate) :
ObservableCollectionViewModel<IWidgetViewModel>(serviceFactory, mediator, disposer, items),
ITemplatedViewModel
@@ -15,5 +16,8 @@ public partial class WidgetContainerViewModel(ITemplateFactory templateFactory,
[ObservableProperty]
private bool alternate = alternate;
[ObservableProperty]
private Guid id = id;
public ITemplateFactory TemplateFactory => templateFactory;
}
+10
View File
@@ -0,0 +1,10 @@
namespace Hyperbar;
public interface IWidget
{
Guid Id { get; set; }
string? Name { get; set; }
string? Description { get; set; }
}
+8
View File
@@ -0,0 +1,8 @@
using Microsoft.Extensions.DependencyInjection;
namespace Hyperbar;
public interface IWidgetBuilder
{
void Create(IServiceCollection services);
}
-9
View File
@@ -1,9 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Hyperbar;
public interface IWidgetProvider
{
void Create(HostBuilderContext context, IServiceCollection services);
}
+11
View File
@@ -0,0 +1,11 @@
namespace Hyperbar;
public class Widget :
IWidget
{
public Guid Id { get; set; } = Guid.NewGuid();
public string? Name { get; set; }
public string? Description { get; set; }
}
+12 -7
View File
@@ -1,10 +1,15 @@
namespace Hyperbar;
using Microsoft.Extensions.DependencyInjection;
public sealed class WidgetConfiguration
namespace Hyperbar;
public class WidgetBuilder
{
public required Guid Id { get; set; }
public static void Config(IServiceCollection services,
Action<IWidget> widgetDelegate)
{
Widget widget = new();
widgetDelegate(widget);
public required string Name { get; set; }
public required string Description { get; set; }
}
services.AddSingleton(widget);
}
}
+9 -2
View File
@@ -1,6 +1,13 @@
namespace Hyperbar;
namespace Hyperbar;
public sealed class WidgetContext(IServiceProvider serviceProvider)
public class WidgetContext(IServiceProvider serviceProvider) :
IInitializer
{
public IServiceProvider ServiceProvider => serviceProvider;
public Task InitializeAsync()
{
throw new NotImplementedException();
}
}