#12918: CachedServiceProviderBase should return the internal service provider when requested.

pull/12963/head
Halil İbrahim Kalkan 3 years ago
parent 58c75ed8cb
commit 0b0b007d7e

@ -12,10 +12,10 @@ public abstract class CachedServiceProviderBase
{
_serviceProvider = serviceProvider;
_cachedServices = new ConcurrentDictionary<Type, Lazy<object>>();
_cachedServices.TryAdd(typeof(IServiceProvider), new Lazy<object>(() => this));
_cachedServices.TryAdd(typeof(IServiceProvider), new Lazy<object>(() => _serviceProvider));
}
public object GetService(Type serviceType)
public virtual object GetService(Type serviceType)
{
return _cachedServices.GetOrAdd(
serviceType,

@ -1,4 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
using System;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Modularity;
using Volo.Abp.Testing.Utils;
@ -20,6 +21,9 @@ public class CachedServiceProvider_Tests
var transientTestService1 = cachedServiceProvider1.GetRequiredService<TransientTestService>();
var transientTestService2 = cachedServiceProvider2.GetRequiredService<TransientTestService>();
transientTestService1.ShouldBeSameAs(transientTestService2);
var cachedServiceProvider3 = cachedServiceProvider1.GetRequiredService<IServiceProvider>().GetRequiredService<ICachedServiceProvider>();
cachedServiceProvider3.ShouldBeSameAs(cachedServiceProvider1);
}
using (var application = AbpApplicationFactory.Create<TestModule>())
@ -49,20 +53,26 @@ public class CachedServiceProvider_Tests
{
void TestResolvingServices(IServiceScope scope)
{
var cachedServiceProvider1 = scope.ServiceProvider.GetRequiredService<ITransientCachedServiceProvider>();
var transientCachedServiceProvider1 = scope.ServiceProvider.GetRequiredService<ITransientCachedServiceProvider>();
var transientTestService1_1 = cachedServiceProvider1.GetRequiredService<TransientTestService>();
var transientTestService1_2 = cachedServiceProvider1.GetRequiredService<TransientTestService>();
var transientTestService1_1 = transientCachedServiceProvider1.GetRequiredService<TransientTestService>();
var transientTestService1_2 = transientCachedServiceProvider1.GetRequiredService<TransientTestService>();
transientTestService1_1.ShouldBeSameAs(transientTestService1_2);
var cachedServiceProvider2 = scope.ServiceProvider.GetRequiredService<ITransientCachedServiceProvider>();
cachedServiceProvider1.ShouldNotBeSameAs(cachedServiceProvider2);
var transientCachedServiceProvider2 = scope.ServiceProvider.GetRequiredService<ITransientCachedServiceProvider>();
transientCachedServiceProvider1.ShouldNotBeSameAs(transientCachedServiceProvider2);
var transientTestService2_1 = cachedServiceProvider2.GetRequiredService<TransientTestService>();
var transientTestService2_2 = cachedServiceProvider2.GetRequiredService<TransientTestService>();
var transientTestService2_1 = transientCachedServiceProvider2.GetRequiredService<TransientTestService>();
var transientTestService2_2 = transientCachedServiceProvider2.GetRequiredService<TransientTestService>();
transientTestService2_1.ShouldBeSameAs(transientTestService2_2);
transientTestService1_1.ShouldNotBeSameAs(transientTestService2_1);
var transientCachedServiceProvider1_1 = transientCachedServiceProvider1.GetRequiredService<IServiceProvider>().GetRequiredService<ITransientCachedServiceProvider>();
var transientCachedServiceProvider1_2 = transientCachedServiceProvider1.GetRequiredService<IServiceProvider>().GetRequiredService<ITransientCachedServiceProvider>();
transientCachedServiceProvider1_1.ShouldNotBeSameAs(transientCachedServiceProvider1);
transientCachedServiceProvider1_2.ShouldNotBeSameAs(transientCachedServiceProvider1);
transientCachedServiceProvider1_1.ShouldNotBeSameAs(transientCachedServiceProvider1_2);
}
using (var application = AbpApplicationFactory.Create<TestModule>())

Loading…
Cancel
Save