Browse Source

Added module shutdown.

pull/81/head
Halil İbrahim Kalkan 9 years ago
parent
commit
aa52001d95
  1. 4
      src/Volo.Abp/Volo/Abp/AbpApplication.cs
  2. 11
      src/Volo.Abp/Volo/Abp/Modularity/AbpModule.cs
  3. 7
      src/Volo.Abp/Volo/Abp/Modularity/ApplicationShutdownContext.cs
  4. 23
      src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleInitializer.cs
  5. 30
      src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleLifecycleContributer.cs
  6. 4
      src/Volo.Abp/Volo/Abp/Modularity/IModuleLifecycleContributer.cs
  7. 4
      src/Volo.Abp/Volo/Abp/Modularity/IModuleLifecycleManager.cs
  8. 6
      src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationInitialization.cs
  9. 9
      src/Volo.Abp/Volo/Abp/Modularity/IOnApplicationShutdown.cs
  10. 28
      src/Volo.Abp/Volo/Abp/Modularity/ModuleInitializationManager.cs
  11. 13
      src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleContributerBase.cs
  12. 39
      src/Volo.Abp/Volo/Abp/Modularity/ModuleLifecycleManager.cs
  13. 8
      test/Volo.Abp.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs
  14. 20
      test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyModule.cs
  15. 18
      test/Volo.Abp.Tests/Volo/Abp/Modularity/IndependentEmptyPlugInModule.cs
  16. 28
      test/Volo.Abp.Tests/Volo/Abp/Modularity/TestModuleBase.cs

4
src/Volo.Abp/Volo/Abp/AbpApplication.cs

@ -63,7 +63,7 @@ namespace Volo.Abp
Check.NotNull(serviceProvider, nameof(serviceProvider));
ServiceProvider = serviceProvider;
ServiceProvider.GetRequiredService<IModuleInitializationManager>().InitializeModules();
ServiceProvider.GetRequiredService<IModuleLifecycleManager>().InitializeModules();
}
private void LoadModules(IServiceCollection services, AbpApplicationCreationOptions options)
@ -79,7 +79,7 @@ namespace Volo.Abp
public void Shutdown()
{
//TODO: Shutdown modules
ServiceProvider.GetRequiredService<IModuleLifecycleManager>().ShutdownModules();
}
}
}

11
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))
{

7
src/Volo.Abp/Volo/Abp/Modularity/ApplicationShutdownContext.cs

@ -0,0 +1,7 @@
namespace Volo.Abp.Modularity
{
public class ApplicationShutdownContext
{
}
}

23
src/Volo.Abp/Volo/Abp/Modularity/DefaultModuleInitializer.cs

@ -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);
}
}
}

30
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);
}
}
}

4
src/Volo.Abp/Volo/Abp/Modularity/IModuleInitializer.cs → 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);
}
}

4
src/Volo.Abp/Volo/Abp/Modularity/IModuleInitializationManager.cs → 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();
}
}

6
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);
}
}

9
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);
}
}

28
src/Volo.Abp/Volo/Abp/Modularity/ModuleInitializationManager.cs

@ -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<IModuleInitializer> _initializers;
public ModuleInitializationManager(IModuleLoader moduleLoader, IEnumerable<IModuleInitializer> initializers)
{
_moduleLoader = moduleLoader;
_initializers = initializers;
}
public void InitializeModules()
{
foreach (var initializer in _initializers)
{
foreach (var module in _moduleLoader.Modules)
{
initializer.Initialize(module.Instance);
}
}
}
}
}

13
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)
{
}
}
}

39
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<IModuleLifecycleContributer> _contributers;
public ModuleLifecycleManager(IModuleLoader moduleLoader, IEnumerable<IModuleLifecycleContributer> 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);
}
}
}
}
}

8
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();
}
}
}

20
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;
}
}
}

18
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;
}
}
}

28
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;
}
}
}
Loading…
Cancel
Save