This commit is contained in:
TheXamlGuy
2024-01-30 22:34:49 +00:00
parent 858a23c28d
commit a2a5591502
5 changed files with 50 additions and 25 deletions
@@ -5,7 +5,7 @@ public class ContextualWidget :
{ {
public IWidgetBuilder Create() => public IWidgetBuilder Create() =>
WidgetBuilder.Create() WidgetBuilder.Create()
.Configuration<ContextualWidgetConfiguration>(args => .UseConfiguration<ContextualWidgetConfiguration>(args =>
{ {
args.Name = "Contextual commands"; args.Name = "Contextual commands";
@@ -8,7 +8,7 @@ public class MediaControllerWidget :
{ {
public IWidgetBuilder Create() => public IWidgetBuilder Create() =>
WidgetBuilder.Create() WidgetBuilder.Create()
.Configuration<MediaControllerWidgetConfiguration>(args => .UseConfiguration<MediaControllerWidgetConfiguration>(args =>
{ {
args.Name = "Media controller"; args.Name = "Media controller";
}) })
@@ -8,7 +8,7 @@ public class PrimaryWidget :
{ {
public IWidgetBuilder Create() => public IWidgetBuilder Create() =>
WidgetBuilder.Create() WidgetBuilder.Create()
.Configuration<PrimaryWidgetConfiguration>(args => .UseConfiguration<PrimaryWidgetConfiguration>(args =>
{ {
args.Name = "Primary commands"; args.Name = "Primary commands";
args.Commands = args.Commands =
+1 -1
View File
@@ -6,7 +6,7 @@ public interface IWidgetBuilder
{ {
IWidgetHost Build(); IWidgetHost Build();
IWidgetBuilder Configuration<TConfiguration>(Action<TConfiguration> configurationDelegate) IWidgetBuilder UseConfiguration<TConfiguration>(Action<TConfiguration> configurationDelegate)
where TConfiguration : where TConfiguration :
WidgetConfiguration, WidgetConfiguration,
new(); new();
+46 -21
View File
@@ -10,6 +10,10 @@ public class WidgetBuilder :
{ {
private readonly IHostBuilder hostBuilder; private readonly IHostBuilder hostBuilder;
private bool configurationRegistered;
private bool viewModelTemplateRegistered;
private WidgetBuilder() private WidgetBuilder()
{ {
hostBuilder = new HostBuilder() hostBuilder = new HostBuilder()
@@ -32,13 +36,25 @@ public class WidgetBuilder :
} }
public static IWidgetBuilder Create() => new WidgetBuilder(); public static IWidgetBuilder Create() => new WidgetBuilder();
public IWidgetHost Build()
{
IHost host = hostBuilder.Build();
return host.Services.GetRequiredService<IWidgetHost>();
}
public IWidgetBuilder Configuration<TConfiguration>(Action<TConfiguration> configurationDelegate) public IWidgetBuilder UseConfiguration<TConfiguration>(Action<TConfiguration> configurationDelegate)
where TConfiguration : where TConfiguration :
WidgetConfiguration, WidgetConfiguration,
new() new()
{ {
TConfiguration configuration = new TConfiguration(); if (configurationRegistered)
{
return this;
}
configurationRegistered = true;
TConfiguration configuration = new();
configurationDelegate(configuration); configurationDelegate(configuration);
hostBuilder.ConfigureServices(services => hostBuilder.ConfigureServices(services =>
@@ -51,33 +67,23 @@ public class WidgetBuilder :
return this; 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();
return host.Services.GetRequiredService<IWidgetHost>();
}
public IWidgetBuilder ConfigureServices(Action<IServiceCollection> configureDelegate) public IWidgetBuilder ConfigureServices(Action<IServiceCollection> configureDelegate)
{ {
hostBuilder.ConfigureServices(configureDelegate); hostBuilder.ConfigureServices(configureDelegate);
return this; return this;
} }
public IWidgetBuilder UseViewModel<TViewModel>() public IWidgetBuilder UseViewModel<TViewModel>()
where TViewModel : where TViewModel :
IWidgetViewModel IWidgetViewModel
{ {
if (viewModelTemplateRegistered)
{
return this;
}
viewModelTemplateRegistered = true;
hostBuilder.ConfigureServices(services => hostBuilder.ConfigureServices(services =>
{ {
services.AddWidgetTemplate<TViewModel>(); services.AddWidgetTemplate<TViewModel>();
@@ -85,4 +91,23 @@ public class WidgetBuilder :
return this; return this;
} }
public IWidgetBuilder UseViewModelTemplate<TWidgetContent, TWidgetTemplate>()
where TWidgetContent :
IWidgetViewModel
{
if (viewModelTemplateRegistered)
{
return this;
}
viewModelTemplateRegistered = true;
hostBuilder.ConfigureServices(services =>
{
services.AddWidgetTemplate<TWidgetContent, TWidgetTemplate>();
});
return this;
}
} }