Browse Source

Added ability to set/create service provider without initializing the ABP application.

pull/8859/head
Halil İbrahim Kalkan 5 years ago
parent
commit
78a47a81c0
  1. 19
      framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs
  2. 13
      framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithInternalServiceProvider.cs
  3. 10
      framework/src/Volo.Abp.Core/Volo/Abp/IAbpApplicationWithExternalServiceProvider.cs
  4. 15
      framework/src/Volo.Abp.Core/Volo/Abp/IAbpApplicationWithInternalServiceProvider.cs

19
framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs

@ -18,7 +18,24 @@ namespace Volo.Abp
services.AddSingleton<IAbpApplicationWithExternalServiceProvider>(this); services.AddSingleton<IAbpApplicationWithExternalServiceProvider>(this);
} }
public void Initialize(IServiceProvider serviceProvider) void IAbpApplicationWithExternalServiceProvider.SetServiceProvider([NotNull] IServiceProvider serviceProvider)
{
Check.NotNull(serviceProvider, nameof(serviceProvider));
if (ServiceProvider != null)
{
if (ServiceProvider != serviceProvider)
{
throw new AbpException("Service provider was already set before to another service provider instance.");
}
return;
}
SetServiceProvider(serviceProvider);
}
public void Initialize([NotNull] IServiceProvider serviceProvider)
{ {
Check.NotNull(serviceProvider, nameof(serviceProvider)); Check.NotNull(serviceProvider, nameof(serviceProvider));

13
framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithInternalServiceProvider.cs

@ -31,11 +31,22 @@ namespace Volo.Abp
Services.AddSingleton<IAbpApplicationWithInternalServiceProvider>(this); Services.AddSingleton<IAbpApplicationWithInternalServiceProvider>(this);
} }
public void Initialize() public IServiceProvider CreateServiceProvider()
{ {
if (ServiceProvider != null)
{
return ServiceProvider;
}
ServiceScope = Services.BuildServiceProviderFromFactory().CreateScope(); ServiceScope = Services.BuildServiceProviderFromFactory().CreateScope();
SetServiceProvider(ServiceScope.ServiceProvider); SetServiceProvider(ServiceScope.ServiceProvider);
return ServiceProvider;
}
public void Initialize()
{
CreateServiceProvider();
InitializeModules(); InitializeModules();
} }

10
framework/src/Volo.Abp.Core/Volo/Abp/IAbpApplicationWithExternalServiceProvider.cs

@ -5,6 +5,16 @@ namespace Volo.Abp
{ {
public interface IAbpApplicationWithExternalServiceProvider : IAbpApplication public interface IAbpApplicationWithExternalServiceProvider : IAbpApplication
{ {
/// <summary>
/// Sets the service provider, but not initializes the modules.
/// </summary>
void SetServiceProvider([NotNull] IServiceProvider serviceProvider);
/// <summary>
/// Sets the service provider and initializes all the modules.
/// If <see cref="SetServiceProvider"/> was called before, the same
/// <see cref="serviceProvider"/> instance should be passed to this method.
/// </summary>
void Initialize([NotNull] IServiceProvider serviceProvider); void Initialize([NotNull] IServiceProvider serviceProvider);
} }
} }

15
framework/src/Volo.Abp.Core/Volo/Abp/IAbpApplicationWithInternalServiceProvider.cs

@ -1,7 +1,20 @@
namespace Volo.Abp using System;
namespace Volo.Abp
{ {
public interface IAbpApplicationWithInternalServiceProvider : IAbpApplication public interface IAbpApplicationWithInternalServiceProvider : IAbpApplication
{ {
/// <summary>
/// Creates the service provider, but not initializes the modules.
/// Multiple calls returns the same service provider without creating again.
/// </summary>
IServiceProvider CreateServiceProvider();
/// <summary>
/// Creates the service provider and initializes all the modules.
/// If <see cref="CreateServiceProvider"/> method was called before,
/// it does not re-create it, but uses the previous one.
/// </summary>
void Initialize(); void Initialize();
} }
} }
Loading…
Cancel
Save