From aa52001d95a13a13d2a8055982e5dc03bdfd7874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 14 Dec 2016 21:25:20 +0300 Subject: [PATCH] Added module shutdown. --- src/Volo.Abp/Volo/Abp/AbpApplication.cs | 4 +- src/Volo.Abp/Volo/Abp/Modularity/AbpModule.cs | 11 ++++-- .../Modularity/ApplicationShutdownContext.cs | 7 ++++ .../Modularity/DefaultModuleInitializer.cs | 23 ----------- .../DefaultModuleLifecycleContributer.cs | 30 ++++++++++++++ ...izer.cs => IModuleLifecycleContributer.cs} | 4 +- ...nManager.cs => IModuleLifecycleManager.cs} | 4 +- .../IOnApplicationInitialization.cs | 6 ++- .../Abp/Modularity/IOnApplicationShutdown.cs | 9 +++++ .../Modularity/ModuleInitializationManager.cs | 28 ------------- .../ModuleLifecycleContributerBase.cs | 13 +++++++ .../Abp/Modularity/ModuleLifecycleManager.cs | 39 +++++++++++++++++++ .../Abp/AbpApplication_Initialize_Tests.cs | 8 +++- .../Abp/Modularity/IndependentEmptyModule.cs | 20 ++-------- .../IndependentEmptyPlugInModule.cs | 18 +-------- .../Volo/Abp/Modularity/TestModuleBase.cs | 28 +++++++++++++ 16 files changed, 157 insertions(+), 95 deletions(-) create mode 100644 src/Volo.Abp/Volo/Abp/Modularity/ApplicationShutdownContext.cs delete mode 100644 src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleInitializer.cs create mode 100644 src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleLifecycleContributer.cs rename src/Volo.Abp/Volo/Abp/Modularity/{IModuleInitializer.cs => IModuleLifecycleContributer.cs} (52%) rename src/Volo.Abp/Volo/Abp/Modularity/{IModuleInitializationManager.cs => IModuleLifecycleManager.cs} (50%) create mode 100644 src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationShutdown.cs delete mode 100644 src/Volo.Abp/Volo/Abp/Modularity/ModuleInitializationManager.cs create mode 100644 src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleContributerBase.cs create mode 100644 src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleManager.cs create mode 100644 test/Volo.Abp.Tests/Volo/Abp/Modularity/TestModuleBase.cs diff --git a/src/Volo.Abp/Volo/Abp/AbpApplication.cs b/src/Volo.Abp/Volo/Abp/AbpApplication.cs index be7213a169..364caffae4 100644 --- a/src/Volo.Abp/Volo/Abp/AbpApplication.cs +++ b/src/Volo.Abp/Volo/Abp/AbpApplication.cs @@ -63,7 +63,7 @@ namespace Volo.Abp Check.NotNull(serviceProvider, nameof(serviceProvider)); ServiceProvider = serviceProvider; - ServiceProvider.GetRequiredService().InitializeModules(); + ServiceProvider.GetRequiredService().InitializeModules(); } private void LoadModules(IServiceCollection services, AbpApplicationCreationOptions options) @@ -79,7 +79,7 @@ namespace Volo.Abp public void Shutdown() { - //TODO: Shutdown modules + ServiceProvider.GetRequiredService().ShutdownModules(); } } } diff --git a/src/Volo.Abp/Volo/Abp/Modularity/AbpModule.cs b/src/Volo.Abp/Volo/Abp/Modularity/AbpModule.cs index 4270b6ae8f..7e664419bf 100644 --- a/src/Volo.Abp/Volo/Abp/Modularity/AbpModule.cs +++ b/src/Volo.Abp/Volo/Abp/Modularity/AbpModule.cs @@ -4,9 +4,9 @@ using Microsoft.Extensions.DependencyInjection; namespace Volo.Abp.Modularity { - public abstract class AbpModule : IAbpModule, IOnApplicationInitialization + public abstract class AbpModule : IAbpModule, IOnApplicationInitialization, IOnApplicationShutdown { - //TODO: Add a OnBeforeConfigureServices method. + //TODO: Add a OnBeforeConfigureServices method? public virtual void ConfigureServices(IServiceCollection services) { @@ -18,6 +18,11 @@ namespace Volo.Abp.Modularity } + public virtual void OnApplicationShutdown(ApplicationShutdownContext context) + { + + } + public static bool IsAbpModule(Type type) { var typeInfo = type.GetTypeInfo(); @@ -29,7 +34,7 @@ namespace Volo.Abp.Modularity typeof(IAbpModule).GetTypeInfo().IsAssignableFrom(type); } - public static void CheckAbpModuleType(Type moduleType) + internal static void CheckAbpModuleType(Type moduleType) { if (!IsAbpModule(moduleType)) { diff --git a/src/Volo.Abp/Volo/Abp/Modularity/ApplicationShutdownContext.cs b/src/Volo.Abp/Volo/Abp/Modularity/ApplicationShutdownContext.cs new file mode 100644 index 0000000000..aff364835f --- /dev/null +++ b/src/Volo.Abp/Volo/Abp/Modularity/ApplicationShutdownContext.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.Modularity +{ + public class ApplicationShutdownContext + { + + } +} \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleInitializer.cs b/src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleInitializer.cs deleted file mode 100644 index 865c38b6b3..0000000000 --- a/src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleInitializer.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; - -namespace Volo.Abp.Modularity -{ - public class DefaultModuleInitializer : IModuleInitializer - { - private readonly IServiceProvider _serviceProvider; - - public DefaultModuleInitializer(IServiceProvider serviceProvider) - { - _serviceProvider = serviceProvider; - } - - public void Initialize(IAbpModule module) - { - var context = new ApplicationInitializationContext( - _serviceProvider - ); - - (module as IOnApplicationInitialization)?.OnApplicationInitialization(context); - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleLifecycleContributer.cs b/src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleLifecycleContributer.cs new file mode 100644 index 0000000000..abb927d4b0 --- /dev/null +++ b/src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleLifecycleContributer.cs @@ -0,0 +1,30 @@ +using System; + +namespace Volo.Abp.Modularity +{ + public class DefaultModuleLifecycleContributer : ModuleLifecycleContributerBase + { + private readonly IServiceProvider _serviceProvider; + + public DefaultModuleLifecycleContributer(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + public override void Initialize(IAbpModule module) + { + var context = new ApplicationInitializationContext( + _serviceProvider + ); + + (module as IOnApplicationInitialization)?.OnApplicationInitialization(context); + } + + public override void Shutdown(IAbpModule module) + { + var context = new ApplicationShutdownContext(); + + (module as IOnApplicationShutdown)?.OnApplicationShutdown(context); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Modularity/IModuleInitializer.cs b/src/Volo.Abp/Volo/Abp/Modularity/IModuleLifecycleContributer.cs similarity index 52% rename from src/Volo.Abp/Volo/Abp/Modularity/IModuleInitializer.cs rename to src/Volo.Abp/Volo/Abp/Modularity/IModuleLifecycleContributer.cs index 7d2d6bdc99..7cb4f55077 100644 --- a/src/Volo.Abp/Volo/Abp/Modularity/IModuleInitializer.cs +++ b/src/Volo.Abp/Volo/Abp/Modularity/IModuleLifecycleContributer.cs @@ -2,8 +2,10 @@ namespace Volo.Abp.Modularity { - public interface IModuleInitializer : ISingletonDependency + public interface IModuleLifecycleContributer : ISingletonDependency { void Initialize(IAbpModule module); + + void Shutdown(IAbpModule module); } } diff --git a/src/Volo.Abp/Volo/Abp/Modularity/IModuleInitializationManager.cs b/src/Volo.Abp/Volo/Abp/Modularity/IModuleLifecycleManager.cs similarity index 50% rename from src/Volo.Abp/Volo/Abp/Modularity/IModuleInitializationManager.cs rename to src/Volo.Abp/Volo/Abp/Modularity/IModuleLifecycleManager.cs index c72d8bc6ed..2ddd471664 100644 --- a/src/Volo.Abp/Volo/Abp/Modularity/IModuleInitializationManager.cs +++ b/src/Volo.Abp/Volo/Abp/Modularity/IModuleLifecycleManager.cs @@ -1,7 +1,9 @@ namespace Volo.Abp.Modularity { - public interface IModuleInitializationManager + public interface IModuleLifecycleManager { void InitializeModules(); + + void ShutdownModules(); } } \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationInitialization.cs b/src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationInitialization.cs index 790a919e53..17a7819186 100644 --- a/src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationInitialization.cs +++ b/src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationInitialization.cs @@ -1,7 +1,9 @@ -namespace Volo.Abp.Modularity +using JetBrains.Annotations; + +namespace Volo.Abp.Modularity { public interface IOnApplicationInitialization { - void OnApplicationInitialization(ApplicationInitializationContext context); + void OnApplicationInitialization([NotNull] ApplicationInitializationContext context); } } \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationShutdown.cs b/src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationShutdown.cs new file mode 100644 index 0000000000..f2cb12e700 --- /dev/null +++ b/src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationShutdown.cs @@ -0,0 +1,9 @@ +using JetBrains.Annotations; + +namespace Volo.Abp.Modularity +{ + public interface IOnApplicationShutdown + { + void OnApplicationShutdown([NotNull] ApplicationShutdownContext context); + } +} \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Modularity/ModuleInitializationManager.cs b/src/Volo.Abp/Volo/Abp/Modularity/ModuleInitializationManager.cs deleted file mode 100644 index 2cd9255de5..0000000000 --- a/src/Volo.Abp/Volo/Abp/Modularity/ModuleInitializationManager.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections.Generic; -using Volo.DependencyInjection; - -namespace Volo.Abp.Modularity -{ - public class ModuleInitializationManager : IModuleInitializationManager, ISingletonDependency - { - private readonly IModuleLoader _moduleLoader; - private readonly IEnumerable _initializers; - - public ModuleInitializationManager(IModuleLoader moduleLoader, IEnumerable initializers) - { - _moduleLoader = moduleLoader; - _initializers = initializers; - } - - public void InitializeModules() - { - foreach (var initializer in _initializers) - { - foreach (var module in _moduleLoader.Modules) - { - initializer.Initialize(module.Instance); - } - } - } - } -} \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleContributerBase.cs b/src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleContributerBase.cs new file mode 100644 index 0000000000..b657090556 --- /dev/null +++ b/src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleContributerBase.cs @@ -0,0 +1,13 @@ +namespace Volo.Abp.Modularity +{ + public abstract class ModuleLifecycleContributerBase : IModuleLifecycleContributer + { + public virtual void Initialize(IAbpModule module) + { + } + + public virtual void Shutdown(IAbpModule module) + { + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleManager.cs b/src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleManager.cs new file mode 100644 index 0000000000..f0e6f0b2fd --- /dev/null +++ b/src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleManager.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using Volo.DependencyInjection; + +namespace Volo.Abp.Modularity +{ + public class ModuleLifecycleManager : IModuleLifecycleManager, ISingletonDependency + { + private readonly IModuleLoader _moduleLoader; + private readonly IEnumerable _contributers; + + public ModuleLifecycleManager(IModuleLoader moduleLoader, IEnumerable contributers) + { + _moduleLoader = moduleLoader; + _contributers = contributers; + } + + public void InitializeModules() + { + foreach (var contributer in _contributers) + { + foreach (var module in _moduleLoader.Modules) + { + contributer.Initialize(module.Instance); + } + } + } + + public void ShutdownModules() + { + foreach (var contributer in _contributers) + { + foreach (var module in _moduleLoader.Modules) + { + contributer.Shutdown(module.Instance); + } + } + } + } +} \ No newline at end of file diff --git a/test/Volo.Abp.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs b/test/Volo.Abp.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs index 37eb1c4919..9a4567c02e 100644 --- a/test/Volo.Abp.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs +++ b/test/Volo.Abp.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs @@ -31,7 +31,9 @@ namespace Volo.Abp application.Shutdown(); - //TODO: Assert shutdown module + //Assert + + module.OnApplicationShutdownIsCalled.ShouldBeTrue(); } } @@ -61,7 +63,9 @@ namespace Volo.Abp application.Shutdown(); - //TODO: Assert shutdown module + //Assert + + plugInModule.OnApplicationShutdownIsCalled.ShouldBeTrue(); } } } \ No newline at end of file diff --git a/test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyModule.cs b/test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyModule.cs index eadc9f8887..9f4fca906a 100644 --- a/test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyModule.cs +++ b/test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyModule.cs @@ -1,21 +1,7 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Volo.Abp.Modularity +namespace Volo.Abp.Modularity { - public class IndependentEmptyModule : AbpModule + public class IndependentEmptyModule : TestModuleBase { - public bool ConfigureServicesIsCalled { get; set; } - - public bool OnApplicationInitializeIsCalled { get; set; } - - public override void ConfigureServices(IServiceCollection services) - { - ConfigureServicesIsCalled = true; - } - - public override void OnApplicationInitialization(ApplicationInitializationContext context) - { - OnApplicationInitializeIsCalled = true; - } + } } diff --git a/test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyPlugInModule.cs b/test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyPlugInModule.cs index 020c130cfe..02bb1ed4a8 100644 --- a/test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyPlugInModule.cs +++ b/test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyPlugInModule.cs @@ -1,21 +1,7 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Volo.Abp.Modularity +namespace Volo.Abp.Modularity { - public class IndependentEmptyPlugInModule : AbpModule + public class IndependentEmptyPlugInModule : TestModuleBase { - public bool ConfigureServicesIsCalled { get; set; } - - public bool OnApplicationInitializeIsCalled { get; set; } - - public override void ConfigureServices(IServiceCollection services) - { - ConfigureServicesIsCalled = true; - } - public override void OnApplicationInitialization(ApplicationInitializationContext context) - { - OnApplicationInitializeIsCalled = true; - } } } \ No newline at end of file diff --git a/test/Volo.Abp.Tests/Volo/Abp/Modularity/TestModuleBase.cs b/test/Volo.Abp.Tests/Volo/Abp/Modularity/TestModuleBase.cs new file mode 100644 index 0000000000..acad15929f --- /dev/null +++ b/test/Volo.Abp.Tests/Volo/Abp/Modularity/TestModuleBase.cs @@ -0,0 +1,28 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace Volo.Abp.Modularity +{ + public class TestModuleBase : AbpModule + { + public bool ConfigureServicesIsCalled { get; set; } + + public bool OnApplicationInitializeIsCalled { get; set; } + + public bool OnApplicationShutdownIsCalled { get; set; } + + public override void ConfigureServices(IServiceCollection services) + { + ConfigureServicesIsCalled = true; + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + OnApplicationInitializeIsCalled = true; + } + + public override void OnApplicationShutdown(ApplicationShutdownContext context) + { + OnApplicationShutdownIsCalled = true; + } + } +} \ No newline at end of file