diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IRootServiceProviderAccessor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IRootServiceProviderAccessor.cs
new file mode 100644
index 0000000000..cb22e45287
--- /dev/null
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IRootServiceProviderAccessor.cs
@@ -0,0 +1,12 @@
+namespace Volo.Abp.DependencyInjection;
+
+///
+/// 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.
+///
+public interface IRootServiceProviderAccessor : IServiceProviderAccessor
+{
+
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/RootServiceProviderAccessor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/RootServiceProviderAccessor.cs
new file mode 100644
index 0000000000..1f0639be12
--- /dev/null
+++ b/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 objectAccessor)
+ {
+ ServiceProvider = objectAccessor.Value;
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs
index 4ce2bf1d36..f51cb8d573 100644
--- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/AbpApplication_Initialize_Tests.cs
+++ b/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())
+ {
+ await application.InitializeAsync();
+
+ application
+ .ServiceProvider
+ .GetRequiredService()
+ .ServiceProvider
+ .ShouldBeSameAs(application.ServiceProvider);
+ }
+ }
}