diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/AbpLazyServiceProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/AbpLazyServiceProvider.cs index b085b90722..6c27cd212b 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/AbpLazyServiceProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/AbpLazyServiceProvider.cs @@ -6,40 +6,39 @@ namespace Volo.Abp.DependencyInjection { public class AbpLazyServiceProvider : IAbpLazyServiceProvider, ITransientDependency { - protected IDictionary> CachedTypes { get; set; } + protected IDictionary CachedServices { get; set; } protected IServiceProvider ServiceProvider { get; set; } public AbpLazyServiceProvider(IServiceProvider serviceProvider) { ServiceProvider = serviceProvider; - - CachedTypes = new Dictionary>(); + CachedServices = new Dictionary(); } public virtual T LazyGetRequiredService() { - return (T)CachedTypes.GetOrAdd(typeof(T), () => new Lazy(() => (T) ServiceProvider.GetRequiredService(typeof(T)))).Value; + return (T) LazyGetRequiredService(typeof(T)); } public virtual object LazyGetRequiredService(Type serviceType) { - return CachedTypes.GetOrAdd(serviceType, () => new Lazy(() => ServiceProvider.GetRequiredService(serviceType))).Value; + return CachedServices.GetOrAdd(serviceType, () => ServiceProvider.GetRequiredService(serviceType)); } public virtual T LazyGetService() { - return (T)CachedTypes.GetOrAdd(typeof(T), () => new Lazy(() => (T) ServiceProvider.GetService(typeof(T)))).Value; + return (T) LazyGetService(typeof(T)); } public virtual object LazyGetService(Type serviceType) { - return CachedTypes.GetOrAdd(serviceType, () => new Lazy(() => ServiceProvider.GetService(serviceType))).Value; + return CachedServices.GetOrAdd(serviceType, () => ServiceProvider.GetService(serviceType)); } public virtual T LazyGetService(T defaultValue) { - return LazyGetService() ?? defaultValue; + return (T) LazyGetService(typeof(T), defaultValue); } public virtual object LazyGetService(Type serviceType, object defaultValue) @@ -47,14 +46,14 @@ namespace Volo.Abp.DependencyInjection return LazyGetService(serviceType) ?? defaultValue; } - public virtual object LazyGetService(Type serviceType, Func factory) + public virtual T LazyGetService(Func factory) { - return CachedTypes.GetOrAdd(serviceType, () => new Lazy(() => factory(ServiceProvider))).Value; + return (T) LazyGetService(typeof(T), factory); } - public virtual T LazyGetService(Func factory) + public virtual object LazyGetService(Type serviceType, Func factory) { - return (T)CachedTypes.GetOrAdd(typeof(T), () => new Lazy(() => factory(ServiceProvider))).Value; + return CachedServices.GetOrAdd(serviceType, () => factory(ServiceProvider)); } } }