From 6c7a6e9cf5932608172569a70ce86c664b224807 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Sun, 29 Sep 2024 22:15:31 +0100 Subject: [PATCH] Added IAsyncInitialization to host startup --- Toolkit.Foundation/AppService.cs | 15 ++++++++++----- Toolkit.Foundation/ComponentHost.cs | 12 +++++++++--- Toolkit.Foundation/DefaultHostBuilder.cs | 2 +- .../IServiceCollectionExtensions.cs | 14 +++++++++++--- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/Toolkit.Foundation/AppService.cs b/Toolkit.Foundation/AppService.cs index 08c2d4a..5efce30 100644 --- a/Toolkit.Foundation/AppService.cs +++ b/Toolkit.Foundation/AppService.cs @@ -2,19 +2,24 @@ namespace Toolkit.Foundation; -public class AppService(IEnumerable initializers, +public class AppService(IEnumerable initializations, + IEnumerable asyncInitializations, IPublisher publisher) : IHostedService { - public Task StartAsync(CancellationToken cancellationToken) + public async Task StartAsync(CancellationToken cancellationToken) { - foreach (IInitialization initializer in initializers) + foreach (IInitialization initialization in initializations) { - initializer.Initialize(); + initialization.Initialize(); + } + + foreach (IAsyncInitialization initialization in asyncInitializations) + { + await initialization.Initialize(); } publisher.Publish(); - return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; diff --git a/Toolkit.Foundation/ComponentHost.cs b/Toolkit.Foundation/ComponentHost.cs index 739a5bc..e679a16 100644 --- a/Toolkit.Foundation/ComponentHost.cs +++ b/Toolkit.Foundation/ComponentHost.cs @@ -4,7 +4,8 @@ using Microsoft.Extensions.Hosting; namespace Toolkit.Foundation; public class ComponentHost(IServiceProvider services, - IEnumerable initializers, + IEnumerable initializations, + IEnumerable asyncInitializations, IEnumerable hostedServices) : IComponentHost { @@ -22,9 +23,14 @@ public class ComponentHost(IServiceProvider services, public async Task StartAsync(CancellationToken cancellationToken = default) { - foreach (IInitialization initializer in initializers) + foreach (IInitialization initialization in initializations) { - initializer.Initialize(); + initialization.Initialize(); + } + + foreach (IAsyncInitialization initialization in asyncInitializations) + { + await initialization.Initialize(); } foreach (IHostedService service in hostedServices) diff --git a/Toolkit.Foundation/DefaultHostBuilder.cs b/Toolkit.Foundation/DefaultHostBuilder.cs index b58e9db..b5e30d5 100644 --- a/Toolkit.Foundation/DefaultHostBuilder.cs +++ b/Toolkit.Foundation/DefaultHostBuilder.cs @@ -64,7 +64,7 @@ public class DefaultHostBuilder : services.AddHandler(); services.AddHandler(); - services.AddInitializer(); + services.AddInitialization(); services.AddHostedService(); }); } diff --git a/Toolkit.Foundation/IServiceCollectionExtensions.cs b/Toolkit.Foundation/IServiceCollectionExtensions.cs index 0b963b3..6b9b822 100644 --- a/Toolkit.Foundation/IServiceCollectionExtensions.cs +++ b/Toolkit.Foundation/IServiceCollectionExtensions.cs @@ -90,11 +90,19 @@ public static class IServiceCollectionExtensions return services; } - public static IServiceCollection AddInitializer(this IServiceCollection services) - where TInitializer : class, + public static IServiceCollection AddInitialization(this IServiceCollection services) + where TInitialization : class, IInitialization { - services.AddTransient(); + services.AddTransient(); + return services; + } + + public static IServiceCollection AddAsyncInitialization(this IServiceCollection services) + where TInitialization : class, + IAsyncInitialization + { + services.AddTransient(); return services; }