From bab5f218e81f1674f061d0f9f5ea3f4c69bdc98e Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Fri, 26 Apr 2024 22:27:31 +0100 Subject: [PATCH] Refactor --- Bitvault.Avalonia/App.axaml.cs | 5 +-- Bitvault.Avalonia/VaultComponent.cs | 5 +-- Bitvault/AllNavigationViewModel.cs | 7 ++-- Bitvault/ArchiveNavigationViewModel.cs | 7 ++-- Bitvault/Bitvault.csproj | 1 + Bitvault/CategoriesNavigationViewModel.cs | 7 ++-- Bitvault/CreateVaultNavigationViewModel.cs | 21 +++++------- Bitvault/CreateVaultViewModel.cs | 7 ++-- Bitvault/FooterViewModel.cs | 7 ++-- Bitvault/IVaultFactory.cs | 5 +-- Bitvault/IVaultHost.cs | 5 +++ Bitvault/LockViewModel.cs | 13 +++----- Bitvault/Locked.cs | 6 ++-- Bitvault/LockerNavigationViewModel.cs | 7 ++-- Bitvault/LockerViewModel.cs | 7 ++-- Bitvault/MainViewModel.cs | 7 ++-- Bitvault/MainWindowViewModel.cs | 7 ++-- Bitvault/ManageNavigationViewModel.cs | 7 ++-- Bitvault/ManageViewModel.cs | 7 ++-- Bitvault/StarredNavigationViewModel.cs | 7 ++-- Bitvault/Unlocked.cs | 6 ++-- Bitvault/VaultConfigurationInitializer.cs | 16 --------- Bitvault/VaultFactory.cs | 6 ++-- Bitvault/VaultHandler.cs | 33 +++++++++++++++---- Bitvault/VaultHostCollection.cs | 5 +-- Bitvault/VaultInitializer.cs | 26 +++++++++++++++ Bitvault/VaultNavigationViewModel.cs | 8 ++--- ....cs => VaultNavigationViewModelHandler.cs} | 2 +- Bitvault/VaultViewModel.cs | 7 ++-- Bitvault/VaultsInitializer.cs | 18 ++++++++++ 30 files changed, 164 insertions(+), 108 deletions(-) create mode 100644 Bitvault/IVaultHost.cs delete mode 100644 Bitvault/VaultConfigurationInitializer.cs create mode 100644 Bitvault/VaultInitializer.cs rename Bitvault/{MainViewModelHandler.cs => VaultNavigationViewModelHandler.cs} (93%) create mode 100644 Bitvault/VaultsInitializer.cs diff --git a/Bitvault.Avalonia/App.axaml.cs b/Bitvault.Avalonia/App.axaml.cs index b83502b..e2d2bf1 100644 --- a/Bitvault.Avalonia/App.axaml.cs +++ b/Bitvault.Avalonia/App.axaml.cs @@ -26,7 +26,8 @@ public partial class App : Application services.AddHandler(); services.AddTransient(); - services.AddInitializer(); + services.AddTransient(); + services.AddInitializer(); if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime) { @@ -38,7 +39,7 @@ public partial class App : Application services.AddHandler(); services.AddTemplate("Main"); - services.AddHandler(); + services.AddHandler(); services.AddTransient(); diff --git a/Bitvault.Avalonia/VaultComponent.cs b/Bitvault.Avalonia/VaultComponent.cs index e69bf4c..777aeef 100644 --- a/Bitvault.Avalonia/VaultComponent.cs +++ b/Bitvault.Avalonia/VaultComponent.cs @@ -1,5 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; -using Toolkit.Foundation; +using Toolkit.Foundation; namespace Bitvault.Avalonia; @@ -10,6 +9,8 @@ public class VaultComponent : ComponentBuilder.Create() .AddServices(services => { + services.AddInitializer(); + services.AddTemplate(); services.AddTemplate(); services.AddTemplate(); diff --git a/Bitvault/AllNavigationViewModel.cs b/Bitvault/AllNavigationViewModel.cs index 2dff6dc..9868e21 100644 --- a/Bitvault/AllNavigationViewModel.cs +++ b/Bitvault/AllNavigationViewModel.cs @@ -2,10 +2,11 @@ namespace Bitvault; -public class AllNavigationViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public class AllNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), IMainNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/ArchiveNavigationViewModel.cs b/Bitvault/ArchiveNavigationViewModel.cs index 3ec64b0..c2310e1 100644 --- a/Bitvault/ArchiveNavigationViewModel.cs +++ b/Bitvault/ArchiveNavigationViewModel.cs @@ -2,10 +2,11 @@ namespace Bitvault; -public class ArchiveNavigationViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public class ArchiveNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), IMainNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/Bitvault.csproj b/Bitvault/Bitvault.csproj index 905a28f..b9f1c41 100644 --- a/Bitvault/Bitvault.csproj +++ b/Bitvault/Bitvault.csproj @@ -6,6 +6,7 @@ + diff --git a/Bitvault/CategoriesNavigationViewModel.cs b/Bitvault/CategoriesNavigationViewModel.cs index 5485195..4f6b192 100644 --- a/Bitvault/CategoriesNavigationViewModel.cs +++ b/Bitvault/CategoriesNavigationViewModel.cs @@ -2,10 +2,11 @@ namespace Bitvault; -public class CategoriesNavigationViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public class CategoriesNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), IMainNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/CreateVaultNavigationViewModel.cs b/Bitvault/CreateVaultNavigationViewModel.cs index a33d2f6..3fb4337 100644 --- a/Bitvault/CreateVaultNavigationViewModel.cs +++ b/Bitvault/CreateVaultNavigationViewModel.cs @@ -2,16 +2,11 @@ namespace Bitvault; -public partial class CreateVaultNavigationViewModel : - ObservableViewModel, - IMainNavigationViewModel -{ - public CreateVaultNavigationViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, - IPublisher publisher, - ISubscriber subscriber, - IDisposer disposer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer) - { - - } -} +public partial class CreateVaultNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), + IMainNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/CreateVaultViewModel.cs b/Bitvault/CreateVaultViewModel.cs index 6561830..e4f0d09 100644 --- a/Bitvault/CreateVaultViewModel.cs +++ b/Bitvault/CreateVaultViewModel.cs @@ -4,12 +4,13 @@ using Toolkit.Foundation; namespace Bitvault; -public partial class CreateVaultViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public partial class CreateVaultViewModel(IServiceProvider provider, + IServiceFactory factory, IPublisher publisher, + IMediator mediator, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), IPrimaryConfirmation { [MaybeNull] diff --git a/Bitvault/FooterViewModel.cs b/Bitvault/FooterViewModel.cs index f7b52a0..288b575 100644 --- a/Bitvault/FooterViewModel.cs +++ b/Bitvault/FooterViewModel.cs @@ -5,11 +5,12 @@ namespace Bitvault; public partial class FooterViewModel : ObservableCollectionViewModel { - public FooterViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, + public FooterViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, - IDisposer disposer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer) + IDisposer disposer) : base(provider, factory, mediator, publisher, subscriber, disposer) { Add(); } diff --git a/Bitvault/IVaultFactory.cs b/Bitvault/IVaultFactory.cs index 80ba47b..0404a85 100644 --- a/Bitvault/IVaultFactory.cs +++ b/Bitvault/IVaultFactory.cs @@ -1,8 +1,9 @@ - +using Toolkit.Foundation; + namespace Bitvault { public interface IVaultFactory { - Task CreateAsync(string name, VaultConfiguration configuration); + IComponentHost? Create(string name, VaultConfiguration configuration); } } \ No newline at end of file diff --git a/Bitvault/IVaultHost.cs b/Bitvault/IVaultHost.cs new file mode 100644 index 0000000..951d535 --- /dev/null +++ b/Bitvault/IVaultHost.cs @@ -0,0 +1,5 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public interface IVaultHost : IComponentHost; diff --git a/Bitvault/LockViewModel.cs b/Bitvault/LockViewModel.cs index c44904f..806ef5d 100644 --- a/Bitvault/LockViewModel.cs +++ b/Bitvault/LockViewModel.cs @@ -2,15 +2,10 @@ namespace Bitvault; -public class LockViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public class LockViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer) -{ - //public Task Confirm() - //{ - // //return Task.FromResult(false); - //} -} + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer); \ No newline at end of file diff --git a/Bitvault/Locked.cs b/Bitvault/Locked.cs index 43b8f69..072760e 100644 --- a/Bitvault/Locked.cs +++ b/Bitvault/Locked.cs @@ -1,5 +1,3 @@ -using Toolkit.Foundation; +namespace Bitvault; -namespace Bitvault; - -public record Locked : INotification; +public record Locked; diff --git a/Bitvault/LockerNavigationViewModel.cs b/Bitvault/LockerNavigationViewModel.cs index 06f1834..5039732 100644 --- a/Bitvault/LockerNavigationViewModel.cs +++ b/Bitvault/LockerNavigationViewModel.cs @@ -2,9 +2,10 @@ namespace Bitvault; -public class LockerNavigationViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public class LockerNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); \ No newline at end of file + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer); \ No newline at end of file diff --git a/Bitvault/LockerViewModel.cs b/Bitvault/LockerViewModel.cs index 5967026..7eaec7f 100644 --- a/Bitvault/LockerViewModel.cs +++ b/Bitvault/LockerViewModel.cs @@ -2,9 +2,10 @@ namespace Bitvault; -public class LockerViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public class LockerViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); \ No newline at end of file + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer); \ No newline at end of file diff --git a/Bitvault/MainViewModel.cs b/Bitvault/MainViewModel.cs index 531c961..8df8027 100644 --- a/Bitvault/MainViewModel.cs +++ b/Bitvault/MainViewModel.cs @@ -10,13 +10,14 @@ public partial class MainViewModel : [ObservableProperty] private FooterViewModel footer; - public MainViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, + public MainViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, IContentTemplate template, - FooterViewModel footer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer) + FooterViewModel footer) : base(provider, factory, mediator, publisher, subscriber, disposer) { Template = template; Footer = footer; diff --git a/Bitvault/MainWindowViewModel.cs b/Bitvault/MainWindowViewModel.cs index c7ee5e8..9b99725 100644 --- a/Bitvault/MainWindowViewModel.cs +++ b/Bitvault/MainWindowViewModel.cs @@ -2,9 +2,10 @@ namespace Bitvault; -public class MainWindowViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public class MainWindowViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); \ No newline at end of file + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer); \ No newline at end of file diff --git a/Bitvault/ManageNavigationViewModel.cs b/Bitvault/ManageNavigationViewModel.cs index 62b0e53..2b37f73 100644 --- a/Bitvault/ManageNavigationViewModel.cs +++ b/Bitvault/ManageNavigationViewModel.cs @@ -6,11 +6,12 @@ public partial class ManageNavigationViewModel : ObservableViewModel, IMainNavigationViewModel { - public ManageNavigationViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, + public ManageNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, - IDisposer disposer) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer) + IDisposer disposer) : base(provider, factory, mediator, publisher, subscriber, disposer) { } diff --git a/Bitvault/ManageViewModel.cs b/Bitvault/ManageViewModel.cs index c84a79a..a4d9311 100644 --- a/Bitvault/ManageViewModel.cs +++ b/Bitvault/ManageViewModel.cs @@ -7,12 +7,13 @@ public partial class ManageViewModel : ObservableCollectionViewModel, IMainNavigationViewModel { - public ManageViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, + public ManageViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, - IContentTemplate template) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer) + IContentTemplate template) : base(provider, factory, mediator, publisher, subscriber, disposer) { Template = template; diff --git a/Bitvault/StarredNavigationViewModel.cs b/Bitvault/StarredNavigationViewModel.cs index 232b3e6..b487225 100644 --- a/Bitvault/StarredNavigationViewModel.cs +++ b/Bitvault/StarredNavigationViewModel.cs @@ -2,10 +2,11 @@ namespace Bitvault; -public class StarredNavigationViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public class StarredNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer), IMainNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/Unlocked.cs b/Bitvault/Unlocked.cs index 3b0d0bf..551b9f9 100644 --- a/Bitvault/Unlocked.cs +++ b/Bitvault/Unlocked.cs @@ -1,5 +1,3 @@ -using Toolkit.Foundation; +namespace Bitvault; -namespace Bitvault; - -public record Unlocked : INotification; \ No newline at end of file +public record Unlocked; \ No newline at end of file diff --git a/Bitvault/VaultConfigurationInitializer.cs b/Bitvault/VaultConfigurationInitializer.cs deleted file mode 100644 index 53bcadf..0000000 --- a/Bitvault/VaultConfigurationInitializer.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Toolkit.Foundation; - -namespace Bitvault; - -public class VaultConfigurationInitializer(IEnumerable> configurations, - IVaultFactory factory) : IInitializer -{ - public async Task Initialize() - { - foreach (IConfigurationDescriptor configuration in configurations) - { - await factory.CreateAsync(configuration.Section, - configuration.Value); - } - } -} diff --git a/Bitvault/VaultFactory.cs b/Bitvault/VaultFactory.cs index 33f2abf..c488520 100644 --- a/Bitvault/VaultFactory.cs +++ b/Bitvault/VaultFactory.cs @@ -8,7 +8,7 @@ public class VaultFactory(IServiceProvider provider, IComponentScopeCollection scopes, IVaultHostCollection vaults) : IVaultFactory { - public async Task CreateAsync(string name, + public IComponentHost? Create(string name, VaultConfiguration configuration) { if (provider.GetRequiredService() is IVaultComponent component) @@ -45,7 +45,9 @@ public class VaultFactory(IServiceProvider provider, host.Services.GetRequiredService())); vaults.Add(host); - await host.StartAsync(); + return host; } + + return default; } } diff --git a/Bitvault/VaultHandler.cs b/Bitvault/VaultHandler.cs index 7dee929..b09ad82 100644 --- a/Bitvault/VaultHandler.cs +++ b/Bitvault/VaultHandler.cs @@ -2,14 +2,35 @@ namespace Bitvault; -public class VaultHandler(IVaultFactory factory) : INotificationHandler> + +public class VaultStorageHandler : + INotificationHandler> { - public async Task Handle(Create args, + public Task Handle(Create args, CancellationToken cancellationToken = default) { - if (args.Value is Vault vault) - { - await factory.CreateAsync($"Vault:{vault.Name}", new VaultConfiguration { Name = vault.Name }); - } + throw new NotImplementedException(); + } +} + +public record VaultStorage(string Name); + +public class VaultHandler(IVaultFactory factory) : + IHandler, bool> +{ + //public async Task Handle(Create args, + // CancellationToken cancellationToken = default) + //{ + // if (args.Value is Vault vault) + // { + // if (factory.Create($"Vault:{vault.Name}", new VaultConfiguration { Name = vault.Name }) is IComponentHost host) + // { + // await host.StartAsync(cancellationToken); + // } + // } + //} + public Task Handle(Create args, CancellationToken cancellationToken) + { + throw new NotImplementedException(); } } \ No newline at end of file diff --git a/Bitvault/VaultHostCollection.cs b/Bitvault/VaultHostCollection.cs index 635bdc8..27baace 100644 --- a/Bitvault/VaultHostCollection.cs +++ b/Bitvault/VaultHostCollection.cs @@ -9,10 +9,7 @@ public class VaultHostCollection : { private readonly List hosts = []; - public void Add(IComponentHost host) - { - hosts.Add(host); - } + public void Add(IComponentHost host) => hosts.Add(host); public IEnumerator GetEnumerator() => hosts.GetEnumerator(); diff --git a/Bitvault/VaultInitializer.cs b/Bitvault/VaultInitializer.cs new file mode 100644 index 0000000..50a3f80 --- /dev/null +++ b/Bitvault/VaultInitializer.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.DependencyInjection; +using Toolkit.Foundation; + +namespace Bitvault; + +public class VaultInitializer(IServiceProvider provider, + IProxyService publisher) : IInitializer +{ + public async Task Initialize() + { + if (provider.GetService() is IComponentHost vault) + { + if (vault.Services.GetRequiredService() is VaultConfiguration configuration) + { + if (vault.Services.GetRequiredService() is IServiceFactory factory) + { + if (factory.Create(configuration.Name) is VaultNavigationViewModel viewModel) + { + await publisher.Proxy.Publish(new Create(viewModel), + nameof(MainViewModel)); + } + } + } + } + } +} \ No newline at end of file diff --git a/Bitvault/VaultNavigationViewModel.cs b/Bitvault/VaultNavigationViewModel.cs index 931bed1..e5b7414 100644 --- a/Bitvault/VaultNavigationViewModel.cs +++ b/Bitvault/VaultNavigationViewModel.cs @@ -15,19 +15,19 @@ public partial class VaultNavigationViewModel : [ObservableProperty] private string name; - public VaultNavigationViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, + public VaultNavigationViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer, IContentTemplate template, - string name) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer) + string name) : base(provider, factory, mediator, publisher, subscriber, disposer) { Template = template; Name = name; - } public IContentTemplate Template { get; set; } diff --git a/Bitvault/MainViewModelHandler.cs b/Bitvault/VaultNavigationViewModelHandler.cs similarity index 93% rename from Bitvault/MainViewModelHandler.cs rename to Bitvault/VaultNavigationViewModelHandler.cs index a3f323d..58fb3ed 100644 --- a/Bitvault/MainViewModelHandler.cs +++ b/Bitvault/VaultNavigationViewModelHandler.cs @@ -3,7 +3,7 @@ using Toolkit.Foundation; namespace Bitvault; -public class MainViewModelHandler(IPublisher publisher, +public class VaultNavigationViewModelHandler(IPublisher publisher, IVaultHostCollection vaults) : INotificationHandler> { diff --git a/Bitvault/VaultViewModel.cs b/Bitvault/VaultViewModel.cs index 56b40ea..81bac04 100644 --- a/Bitvault/VaultViewModel.cs +++ b/Bitvault/VaultViewModel.cs @@ -2,9 +2,10 @@ namespace Bitvault; -public class VaultViewModel(IServiceProvider serviceProvider, - IServiceFactory serviceFactory, +public class VaultViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, IPublisher publisher, ISubscriber subscriber, IDisposer disposer) : - ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); + ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer); diff --git a/Bitvault/VaultsInitializer.cs b/Bitvault/VaultsInitializer.cs new file mode 100644 index 0000000..746cec7 --- /dev/null +++ b/Bitvault/VaultsInitializer.cs @@ -0,0 +1,18 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class VaultsInitializer(IEnumerable> configurations, + IVaultFactory factory) : IInitializer +{ + public async Task Initialize() + { + foreach (IConfigurationDescriptor configuration in configurations) + { + if (factory.Create(configuration.Section, configuration.Value) is IComponentHost host) + { + await host.StartAsync(); + } + } + } +} \ No newline at end of file