From fdcce769e5be33587996eea3a718ae18087bfb80 Mon Sep 17 00:00:00 2001 From: Daniel Clark Date: Thu, 8 Dec 2022 10:38:58 +0000 Subject: [PATCH] Initialization rework --- .../IServiceCollectionExtensions.cs | 11 -------- Toolkit.Foundation/Lifecycles/AppService.cs | 9 +++---- .../Lifecycles/IInitialization.cs | 7 ----- .../Lifecycles/Initialization.cs | 25 +++-------------- .../Lifecycles/InitializationHandler.cs | 27 +++++++++++++++++++ .../{Initialize.cs => Initialized.cs} | 2 +- 6 files changed, 35 insertions(+), 46 deletions(-) delete mode 100644 Toolkit.Foundation/Lifecycles/IInitialization.cs create mode 100644 Toolkit.Foundation/Lifecycles/InitializationHandler.cs rename Toolkit.Foundation/Lifecycles/{Initialize.cs => Initialized.cs} (52%) diff --git a/Toolkit.Foundation/Extensions/IServiceCollectionExtensions.cs b/Toolkit.Foundation/Extensions/IServiceCollectionExtensions.cs index 25fdf97..2b8a27c 100644 --- a/Toolkit.Foundation/Extensions/IServiceCollectionExtensions.cs +++ b/Toolkit.Foundation/Extensions/IServiceCollectionExtensions.cs @@ -8,17 +8,6 @@ namespace Toolkit.Foundation { serviceCollection.AddSingleton(provider => new ServiceFactory(provider.GetService, (instanceType, parameters) => ActivatorUtilities.CreateInstance(provider, instanceType, parameters!))); - serviceCollection - .AddSingleton(provider => new Initialization(() => - { - return serviceCollection.Where(x => x.ServiceType.GetInterfaces() - .Contains(typeof(IInitializer)) || x.ServiceType == typeof(IInitializer)) - .GroupBy(x => x.ServiceType) - .Select(x => x.First()) - .SelectMany(x => provider.GetServices(x.ServiceType) - .Select(x => (IInitializer?)x)).ToList(); - })); - return serviceCollection; } } diff --git a/Toolkit.Foundation/Lifecycles/AppService.cs b/Toolkit.Foundation/Lifecycles/AppService.cs index 1a6833d..b551a1d 100644 --- a/Toolkit.Foundation/Lifecycles/AppService.cs +++ b/Toolkit.Foundation/Lifecycles/AppService.cs @@ -6,19 +6,16 @@ namespace Toolkit.Foundation public class AppService : IHostedService { private readonly IMediator mediator; - private readonly IInitialization initialization; - public AppService(IMediator mediator, - IInitialization initialization) + public AppService(IMediator mediator) { this.mediator = mediator; - this.initialization = initialization; } public async Task StartAsync(CancellationToken cancellationToken) { - await mediator.Send(new Initialize()); - await initialization.InitializeAsync(); + await mediator.Send(new Initialization()); + await mediator.Send(new Initialized()); } public Task StopAsync(CancellationToken cancellationToken) diff --git a/Toolkit.Foundation/Lifecycles/IInitialization.cs b/Toolkit.Foundation/Lifecycles/IInitialization.cs deleted file mode 100644 index b70f951..0000000 --- a/Toolkit.Foundation/Lifecycles/IInitialization.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Toolkit.Foundation -{ - public interface IInitialization - { - Task InitializeAsync(); - } -} diff --git a/Toolkit.Foundation/Lifecycles/Initialization.cs b/Toolkit.Foundation/Lifecycles/Initialization.cs index 620eac0..9549b4a 100644 --- a/Toolkit.Foundation/Lifecycles/Initialization.cs +++ b/Toolkit.Foundation/Lifecycles/Initialization.cs @@ -1,23 +1,6 @@ -namespace Toolkit.Foundation +using Mediator; + +namespace Toolkit.Foundation { - public class Initialization : IInitialization - { - private readonly Func> factory; - - public Initialization(Func> factory) - { - this.factory = factory; - } - - public async Task InitializeAsync() - { - foreach (IInitializer? initializer in factory()) - { - if (initializer is not null) - { - await initializer.InitializeAsync(); - } - } - } - } + public record Initialization : IRequest; } diff --git a/Toolkit.Foundation/Lifecycles/InitializationHandler.cs b/Toolkit.Foundation/Lifecycles/InitializationHandler.cs new file mode 100644 index 0000000..0bb08e7 --- /dev/null +++ b/Toolkit.Foundation/Lifecycles/InitializationHandler.cs @@ -0,0 +1,27 @@ +using Mediator; + +namespace Toolkit.Foundation +{ + public class InitializationHandler : IRequestHandler + { + private readonly IEnumerable initializers; + + public InitializationHandler(IEnumerable initializers) + { + this.initializers = initializers; + } + + public async ValueTask Handle(Initialization request, CancellationToken cancellationToken) + { + foreach (IInitializer? initializer in initializers) + { + if (initializer is not null) + { + await initializer.InitializeAsync(); + } + } + + return default; + } + } +} diff --git a/Toolkit.Foundation/Lifecycles/Initialize.cs b/Toolkit.Foundation/Lifecycles/Initialized.cs similarity index 52% rename from Toolkit.Foundation/Lifecycles/Initialize.cs rename to Toolkit.Foundation/Lifecycles/Initialized.cs index fd95724..b4e85b6 100644 --- a/Toolkit.Foundation/Lifecycles/Initialize.cs +++ b/Toolkit.Foundation/Lifecycles/Initialized.cs @@ -2,5 +2,5 @@ namespace Toolkit.Foundation { - public record class Initialize : IRequest; + public record class Initialized : IRequest; }