Browse Source

Refactored.

pull/96/head
Halil İbrahim Kalkan 9 years ago
parent
commit
7511853740
  1. 17
      src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/Program.cs
  2. 3
      src/Volo.Abp/Volo/Abp/AbpApplicationBase.cs
  3. 30
      src/Volo.Abp/Volo/Abp/AbpApplicationFactory.cs
  4. 9
      src/Volo.Abp/Volo/Abp/AbpApplicationWithInternalServiceProvider.cs
  5. 20
      src/Volo.Abp/Volo/Abp/IAbpApplication.cs
  6. 37
      test/Volo.Abp.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs

17
src/AbpDesk/AbpDesk.ConsoleDemo/AbpDesk/ConsoleDemo/Program.cs

@ -23,25 +23,20 @@ namespace AbpDesk.ConsoleDemo
private static void RunDemo()
{
var services = new ServiceCollection();
using (var application = services.AddApplication<AbpDeskConsoleDemoModule>(options =>
using (var application = AbpApplicationFactory.Create<AbpDeskConsoleDemoModule>(options =>
{
options.UseAutofac();
AddPlugIns(options);
}))
{
using (var scope = services.BuildServiceProviderFromFactory().CreateScope())
{
application.Initialize(scope.ServiceProvider);
application.Initialize();
RunListers(application);
RunListers(application);
Console.WriteLine("Press ENTER to exit...");
Console.ReadLine();
Console.WriteLine("Press ENTER to exit...");
Console.ReadLine();
application.Shutdown();
}
application.Shutdown();
}
}

3
src/Volo.Abp/Volo/Abp/AbpApplicationBase.cs

@ -13,6 +13,8 @@ namespace Volo.Abp
public IServiceProvider ServiceProvider { get; protected set; }
public IServiceCollection Services { get; }
[NotNull]
public AbpModuleDescriptor[] Modules { get; }
@ -25,6 +27,7 @@ namespace Volo.Abp
Check.NotNull(services, nameof(services));
StartupModuleType = startupModuleType;
Services = services;
var options = new AbpApplicationCreationOptions(services);
optionsAction?.Invoke(options);

30
src/Volo.Abp/Volo/Abp/AbpApplicationFactory.cs

@ -7,32 +7,36 @@ namespace Volo.Abp
{
public static class AbpApplicationFactory
{
public static IAbpApplicationWithExternalServiceProvider Create<TStartupModule>(
[NotNull] IServiceCollection services)
// IAbpApplicationWithExternalServiceProvider //////////////////////////////////////
public static IAbpApplicationWithInternalServiceProvider Create<TStartupModule>(
[CanBeNull] Action<AbpApplicationCreationOptions> optionsAction = null)
where TStartupModule : IAbpModule
{
return Create<TStartupModule>(services, null);
return Create(typeof(TStartupModule), optionsAction);
}
public static IAbpApplicationWithExternalServiceProvider Create<TStartupModule>(
[NotNull] IServiceCollection services,
[CanBeNull] Action<AbpApplicationCreationOptions> optionsAction)
where TStartupModule : IAbpModule
public static IAbpApplicationWithInternalServiceProvider Create(
[NotNull] Type startupModuleType,
[CanBeNull] Action<AbpApplicationCreationOptions> optionsAction = null)
{
return new AbpApplicationWithExternalServiceProvider(typeof(TStartupModule), services, optionsAction);
return new AbpApplicationWithInternalServiceProvider(startupModuleType, optionsAction);
}
public static IAbpApplicationWithExternalServiceProvider Create(
[NotNull] Type startupModuleType,
[NotNull] IServiceCollection services)
// IAbpApplicationWithExternalServiceProvider //////////////////////////////////////
public static IAbpApplicationWithExternalServiceProvider Create<TStartupModule>(
[NotNull] IServiceCollection services,
[CanBeNull] Action<AbpApplicationCreationOptions> optionsAction = null)
where TStartupModule : IAbpModule
{
return Create(startupModuleType, services, null);
return Create(typeof(TStartupModule), services, optionsAction);
}
public static IAbpApplicationWithExternalServiceProvider Create(
[NotNull] Type startupModuleType,
[NotNull] IServiceCollection services,
[CanBeNull] Action<AbpApplicationCreationOptions> optionsAction)
[CanBeNull] Action<AbpApplicationCreationOptions> optionsAction = null)
{
return new AbpApplicationWithExternalServiceProvider(startupModuleType, services, optionsAction);
}

9
src/Volo.Abp/Volo/Abp/AbpApplicationWithInternalServiceProvider.cs

@ -7,7 +7,7 @@ namespace Volo.Abp
{
internal class AbpApplicationWithInternalServiceProvider : AbpApplicationBase, IAbpApplicationWithInternalServiceProvider
{
public IServiceScope ServiceScope { get; }
public IServiceScope ServiceScope { get; private set; }
public AbpApplicationWithInternalServiceProvider(
[NotNull] Type startupModuleType,
@ -29,14 +29,13 @@ namespace Volo.Abp
services,
optionsAction)
{
services.AddSingleton<IAbpApplicationWithInternalServiceProvider>(_ => this);
ServiceScope = services.BuildServiceProviderFromFactory().CreateScope();
ServiceProvider = ServiceScope.ServiceProvider;
Services.AddSingleton<IAbpApplicationWithInternalServiceProvider>(_ => this);
}
public void Initialize()
{
ServiceScope = Services.BuildServiceProviderFromFactory().CreateScope();
ServiceProvider = ServiceScope.ServiceProvider;
ServiceProvider
.GetRequiredService<IModuleManager>()
.InitializeModules(new ApplicationInitializationContext(ServiceProvider));

20
src/Volo.Abp/Volo/Abp/IAbpApplication.cs

@ -1,16 +1,36 @@
using System;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
namespace Volo.Abp
{
public interface IAbpApplication : IDisposable
{
/// <summary>
/// Type of the startup (entrance) module of the application.
/// </summary>
Type StartupModuleType { get; }
/// <summary>
/// List of services registered to this application.
/// Can not add new services to this collection after application initialize.
/// </summary>
IServiceCollection Services { get; }
/// <summary>
/// Reference to the root service provider used by the application.
/// This can not be used before initialize the application.
/// </summary>
IServiceProvider ServiceProvider { get; }
/// <summary>
/// List of modules loaded into this application.
/// </summary>
AbpModuleDescriptor[] Modules { get; }
/// <summary>
/// Used to gracefully shutdown the application and all modules.
/// </summary>
void Shutdown();
}
}

37
test/Volo.Abp.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs

@ -11,54 +11,45 @@ namespace Volo.Abp
[Fact]
public void Should_Initialize_Single_Module()
{
//Arrange
var services = new ServiceCollection();
using (var application = services.AddApplication<IndependentEmptyModule>())
using (var application = AbpApplicationFactory.Create<IndependentEmptyModule>())
{
//Assert
var module = services.GetSingletonInstance<IndependentEmptyModule>();
var module = application.Services.GetSingletonInstance<IndependentEmptyModule>();
module.PreConfigureServicesIsCalled.ShouldBeTrue();
module.ConfigureServicesIsCalled.ShouldBeTrue();
module.PostConfigureServicesIsCalled.ShouldBeTrue();
using (var scope = services.BuildServiceProvider().CreateScope())
{
//Act
application.Initialize(scope.ServiceProvider);
//Act
application.Initialize();
//Assert
application.ServiceProvider.GetRequiredService<IndependentEmptyModule>().ShouldBeSameAs(module);
module.OnApplicationInitializeIsCalled.ShouldBeTrue();
//Assert
application.ServiceProvider.GetRequiredService<IndependentEmptyModule>().ShouldBeSameAs(module);
module.OnApplicationInitializeIsCalled.ShouldBeTrue();
//Act
application.Shutdown();
//Act
application.Shutdown();
//Assert
module.OnApplicationShutdownIsCalled.ShouldBeTrue();
}
//Assert
module.OnApplicationShutdownIsCalled.ShouldBeTrue();
}
}
[Fact]
public void Should_Initialize_PlugIn()
{
//Arrange
var services = new ServiceCollection();
//Act
using (var application = services.AddApplication<IndependentEmptyModule>(options =>
using (var application = AbpApplicationFactory.Create<IndependentEmptyModule>(options =>
{
options.PlugInSources.AddTypes(typeof(IndependentEmptyPlugInModule));
}))
{
//Assert
var plugInModule = services.GetSingletonInstance<IndependentEmptyPlugInModule>();
var plugInModule = application.Services.GetSingletonInstance<IndependentEmptyPlugInModule>();
plugInModule.PreConfigureServicesIsCalled.ShouldBeTrue();
plugInModule.ConfigureServicesIsCalled.ShouldBeTrue();
plugInModule.PostConfigureServicesIsCalled.ShouldBeTrue();
//Act
application.Initialize(services.BuildServiceProvider());
application.Initialize();
//Assert
application.ServiceProvider.GetRequiredService<IndependentEmptyPlugInModule>().ShouldBeSameAs(plugInModule);

Loading…
Cancel
Save