From 23a715300927f135cf3d9b686d0b246482247c37 Mon Sep 17 00:00:00 2001 From: Thomas Fuchs Date: Thu, 26 Oct 2023 11:07:39 +0200 Subject: [PATCH] Fix disposed exception on shutdown --- .../KernelServiceCollectionExtensions.cs | 7 +++++-- src/StartProject.Asp/Program.cs | 8 ++++++-- .../KernelServiceCollectionExtensionsTests.cs | 14 ++------------ 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/Moryx.Runtime.Kernel/KernelServiceCollectionExtensions.cs b/src/Moryx.Runtime.Kernel/KernelServiceCollectionExtensions.cs index c64bb540e..83bc5b833 100644 --- a/src/Moryx.Runtime.Kernel/KernelServiceCollectionExtensions.cs +++ b/src/Moryx.Runtime.Kernel/KernelServiceCollectionExtensions.cs @@ -87,24 +87,27 @@ public static IConfigManager UseMoryxConfigurations(this IServiceProvider servic return configManager; } + private static IModuleManager _moduleManager; /// /// Boot system and start all modules /// /// /// + [Obsolete("Resolve IModuleManager and call StartModules directly")] public static IModuleManager StartMoryxModules(this IServiceProvider serviceProvider) { var moduleManager = serviceProvider.GetRequiredService(); moduleManager.StartModules(); - return moduleManager; + return _moduleManager = moduleManager; } /// /// Stop all modules /// + [Obsolete("Stopping modules on service collection causes an exception, call StopModules on the return value of StartModules")] public static IModuleManager StopMoryxModules(this IServiceProvider serviceProvider) { - var moduleManager = serviceProvider.GetRequiredService(); + var moduleManager = _moduleManager ?? serviceProvider.GetRequiredService(); moduleManager.StopModules(); return moduleManager; } diff --git a/src/StartProject.Asp/Program.cs b/src/StartProject.Asp/Program.cs index f47c08d31..bc308a172 100644 --- a/src/StartProject.Asp/Program.cs +++ b/src/StartProject.Asp/Program.cs @@ -4,6 +4,8 @@ using Moryx.Tools; using Moryx.Model; using Moryx.Runtime.Endpoints; +using Microsoft.Extensions.DependencyInjection; +using Moryx.Runtime.Modules; namespace StartProject.Asp { @@ -26,11 +28,13 @@ public static void Main(string[] args) }).Build(); host.Services.UseMoryxConfigurations("Config"); - host.Services.StartMoryxModules(); + + var moduleManager = host.Services.GetRequiredService(); + moduleManager.StartModules(); host.Run(); - host.Services.StopMoryxModules(); + moduleManager.StopModules(); } } } diff --git a/src/Tests/Moryx.Runtime.Kernel.Tests/KernelServiceCollectionExtensionsTests.cs b/src/Tests/Moryx.Runtime.Kernel.Tests/KernelServiceCollectionExtensionsTests.cs index 747ab1383..c6ea2cbcb 100644 --- a/src/Tests/Moryx.Runtime.Kernel.Tests/KernelServiceCollectionExtensionsTests.cs +++ b/src/Tests/Moryx.Runtime.Kernel.Tests/KernelServiceCollectionExtensionsTests.cs @@ -85,11 +85,11 @@ public void SetupConfigurationToBeUsed() } [Test] - public void StartAllModules() + public void StartAndStopAllModules() { // Arrange var moduleManagerMock = new Mock(); - _serviceCollection.AddSingleton(moduleManagerMock.Object); + _serviceCollection.AddSingleton(moduleManagerMock.Object); var provider = _serviceCollection.BuildServiceProvider(); // Act @@ -98,22 +98,12 @@ public void StartAllModules() // Assert moduleManagerMock.Verify(m => m.StartModules(), Times.Once); moduleManagerMock.VerifyNoOtherCalls(); - } - - [Test] - public void StopAllModules() - { - // Arrange - var moduleManagerMock = new Mock(); - _serviceCollection.AddSingleton(moduleManagerMock.Object); - var provider = _serviceCollection.BuildServiceProvider(); // Act provider.StopMoryxModules(); // Assert moduleManagerMock.Verify(m => m.StopModules(), Times.Once); - moduleManagerMock.VerifyNoOtherCalls(); } } }