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

pull/8859/head
Halil İbrahim Kalkan 5 years ago
parent 238cc7f4a0
commit 78a47a81c0

@ -18,7 +18,24 @@ namespace Volo.Abp
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));

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

@ -5,6 +5,16 @@ namespace Volo.Abp
{
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);
}
}

@ -1,7 +1,20 @@
namespace Volo.Abp
using System;
namespace Volo.Abp
{
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();
}
}
Loading…
Cancel
Save