Browse Source

Introduce IRootServiceProviderAccessor

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
4014a60dfb
  1. 12
      framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IRootServiceProviderAccessor.cs
  2. 14
      framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/RootServiceProviderAccessor.cs
  3. 16
      framework/test/Volo.Abp.Core.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs

12
framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IRootServiceProviderAccessor.cs

@ -0,0 +1,12 @@
namespace Volo.Abp.DependencyInjection;
/// <summary>
/// Gets the root service provider of the application.
/// Be careful to use the root service provider since there is no way
/// to release/dispose objects resolved from the root service provider.
/// So, always create a new scope if you need to resolve any service.
/// </summary>
public interface IRootServiceProviderAccessor : IServiceProviderAccessor
{
}

14
framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/RootServiceProviderAccessor.cs

@ -0,0 +1,14 @@
using System;
namespace Volo.Abp.DependencyInjection;
[ExposeServices(typeof(IRootServiceProviderAccessor))]
public class RootServiceProviderAccessor : IRootServiceProviderAccessor, ISingletonDependency
{
public IServiceProvider ServiceProvider { get; }
public RootServiceProviderAccessor(IObjectAccessor<IServiceProvider> objectAccessor)
{
ServiceProvider = objectAccessor.Value;
}
}

16
framework/test/Volo.Abp.Core.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs

@ -1,6 +1,7 @@
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Modularity;
using Volo.Abp.Modularity.PlugIns;
using Xunit;
@ -157,4 +158,19 @@ public class AbpApplication_Initialize_Tests
application.Services.GetApplicationName().ShouldBe(applicationName);
}
}
[Fact]
public async Task Should_Resolve_Root_Service_Provider()
{
using (var application = await AbpApplicationFactory.CreateAsync<IndependentEmptyModule>())
{
await application.InitializeAsync();
application
.ServiceProvider
.GetRequiredService<IRootServiceProviderAccessor>()
.ServiceProvider
.ShouldBeSameAs(application.ServiceProvider);
}
}
}

Loading…
Cancel
Save