diff --git a/Hyperbar.Widget.Contextual.Windows/ContextualWidget.cs b/Hyperbar.Widget.Contextual.Windows/ContextualWidget.cs index 82b8865..72af54a 100644 --- a/Hyperbar.Widget.Contextual.Windows/ContextualWidget.cs +++ b/Hyperbar.Widget.Contextual.Windows/ContextualWidget.cs @@ -5,7 +5,7 @@ public class ContextualWidget : { public IWidgetBuilder Create() => WidgetBuilder.Create() - .Configuration(args => + .UseConfiguration(args => { args.Name = "Contextual commands"; diff --git a/Hyperbar.Widget.MediaController.Windows/MediaControllerWidget.cs b/Hyperbar.Widget.MediaController.Windows/MediaControllerWidget.cs index 18f99f5..0e86910 100644 --- a/Hyperbar.Widget.MediaController.Windows/MediaControllerWidget.cs +++ b/Hyperbar.Widget.MediaController.Windows/MediaControllerWidget.cs @@ -8,7 +8,7 @@ public class MediaControllerWidget : { public IWidgetBuilder Create() => WidgetBuilder.Create() - .Configuration(args => + .UseConfiguration(args => { args.Name = "Media controller"; }) diff --git a/Hyperbar.Widget.Primary.Windows/PrimaryWidget.cs b/Hyperbar.Widget.Primary.Windows/PrimaryWidget.cs index 712335b..98bec55 100644 --- a/Hyperbar.Widget.Primary.Windows/PrimaryWidget.cs +++ b/Hyperbar.Widget.Primary.Windows/PrimaryWidget.cs @@ -8,7 +8,7 @@ public class PrimaryWidget : { public IWidgetBuilder Create() => WidgetBuilder.Create() - .Configuration(args => + .UseConfiguration(args => { args.Name = "Primary commands"; args.Commands = diff --git a/Hyperbar.Widget/IWidgetBuilder.cs b/Hyperbar.Widget/IWidgetBuilder.cs index 0ce70c8..212c4b2 100644 --- a/Hyperbar.Widget/IWidgetBuilder.cs +++ b/Hyperbar.Widget/IWidgetBuilder.cs @@ -6,7 +6,7 @@ public interface IWidgetBuilder { IWidgetHost Build(); - IWidgetBuilder Configuration(Action configurationDelegate) + IWidgetBuilder UseConfiguration(Action configurationDelegate) where TConfiguration : WidgetConfiguration, new(); diff --git a/Hyperbar.Widget/WidgetBuilder.cs b/Hyperbar.Widget/WidgetBuilder.cs index e9031c9..670c456 100644 --- a/Hyperbar.Widget/WidgetBuilder.cs +++ b/Hyperbar.Widget/WidgetBuilder.cs @@ -10,6 +10,10 @@ public class WidgetBuilder : { private readonly IHostBuilder hostBuilder; + private bool configurationRegistered; + + private bool viewModelTemplateRegistered; + private WidgetBuilder() { hostBuilder = new HostBuilder() @@ -32,13 +36,25 @@ public class WidgetBuilder : } public static IWidgetBuilder Create() => new WidgetBuilder(); + public IWidgetHost Build() + { + IHost host = hostBuilder.Build(); + return host.Services.GetRequiredService(); + } - public IWidgetBuilder Configuration(Action configurationDelegate) + public IWidgetBuilder UseConfiguration(Action configurationDelegate) where TConfiguration : WidgetConfiguration, new() { - TConfiguration configuration = new TConfiguration(); + if (configurationRegistered) + { + return this; + } + + configurationRegistered = true; + + TConfiguration configuration = new(); configurationDelegate(configuration); hostBuilder.ConfigureServices(services => @@ -51,33 +67,23 @@ public class WidgetBuilder : return this; } - public IWidgetBuilder UseViewModelTemplate() - where TWidgetContent : - IWidgetViewModel - { - hostBuilder.ConfigureServices(services => - { - services.AddWidgetTemplate(); - }); - - return this; - } - public IWidgetHost Build() - { - IHost host = hostBuilder.Build(); - return host.Services.GetRequiredService(); - } - public IWidgetBuilder ConfigureServices(Action configureDelegate) { hostBuilder.ConfigureServices(configureDelegate); return this; } - public IWidgetBuilder UseViewModel() - where TViewModel : + public IWidgetBuilder UseViewModel() + where TViewModel : IWidgetViewModel { + if (viewModelTemplateRegistered) + { + return this; + } + + viewModelTemplateRegistered = true; + hostBuilder.ConfigureServices(services => { services.AddWidgetTemplate(); @@ -85,4 +91,23 @@ public class WidgetBuilder : return this; } + + public IWidgetBuilder UseViewModelTemplate() + where TWidgetContent : + IWidgetViewModel + { + if (viewModelTemplateRegistered) + { + return this; + } + + viewModelTemplateRegistered = true; + + hostBuilder.ConfigureServices(services => + { + services.AddWidgetTemplate(); + }); + + return this; + } }