From 0a061ad4e3b2d5813a44213fb3dfd499ac78e2a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 30 Nov 2022 10:53:08 +0300 Subject: [PATCH] Equalize IAbpLazyServiceProvider and ITransientCachedServiceProvider To reduce cached service provider service count. --- .../AbpLazyServiceProvider.cs | 29 ++++--------------- .../CachedServiceProviderBase.cs | 26 +++++++++++++++-- .../IAbpLazyServiceProvider.cs | 26 ++++++----------- .../ICachedServiceProvider.cs | 6 ++-- .../ICachedServiceProviderBase.cs | 14 +++++++++ .../ITransientCachedServiceProvider.cs | 4 +-- 6 files changed, 55 insertions(+), 50 deletions(-) create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ICachedServiceProviderBase.cs 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 8af18416ff..60d4afd40c 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/AbpLazyServiceProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/AbpLazyServiceProvider.cs @@ -3,6 +3,10 @@ using Microsoft.Extensions.DependencyInjection; namespace Volo.Abp.DependencyInjection; +/// +/// This class is equivalent of the . +/// Use instead of this class, for new projects. +/// [ExposeServices(typeof(IAbpLazyServiceProvider))] public class AbpLazyServiceProvider : CachedServiceProviderBase, @@ -13,29 +17,8 @@ public class AbpLazyServiceProvider : : base(serviceProvider) { } - - public T GetService(T defaultValue) - { - return (T)GetService(typeof(T), defaultValue); - } - - public object GetService(Type serviceType, object defaultValue) - { - return GetService(serviceType) ?? defaultValue; - } - - public T GetService(Func factory) - { - return (T)GetService(typeof(T), factory); - } - public object GetService(Type serviceType, Func factory) - { - return CachedServices.GetOrAdd( - serviceType, - _ => new Lazy(() => factory(ServiceProvider)) - ).Value; - } + #region Old Methods public virtual T LazyGetRequiredService() { @@ -57,8 +40,6 @@ public class AbpLazyServiceProvider : return GetService(serviceType); } - #region Old Methods - public virtual T LazyGetService(T defaultValue) { return GetService(defaultValue); diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/CachedServiceProviderBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/CachedServiceProviderBase.cs index 49da116fea..21f2b1c516 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/CachedServiceProviderBase.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/CachedServiceProviderBase.cs @@ -1,10 +1,9 @@ using System; using System.Collections.Concurrent; -using Microsoft.Extensions.DependencyInjection; namespace Volo.Abp.DependencyInjection; -public abstract class CachedServiceProviderBase : IServiceProvider +public abstract class CachedServiceProviderBase : ICachedServiceProviderBase { protected IServiceProvider ServiceProvider { get; } protected ConcurrentDictionary> CachedServices { get; } @@ -23,4 +22,27 @@ public abstract class CachedServiceProviderBase : IServiceProvider _ => new Lazy(() => ServiceProvider.GetService(serviceType)) ).Value; } + + public T GetService(T defaultValue) + { + return (T)GetService(typeof(T), defaultValue); + } + + public object GetService(Type serviceType, object defaultValue) + { + return GetService(serviceType) ?? defaultValue; + } + + public T GetService(Func factory) + { + return (T)GetService(typeof(T), factory); + } + + public object GetService(Type serviceType, Func factory) + { + return CachedServices.GetOrAdd( + serviceType, + _ => new Lazy(() => factory(ServiceProvider)) + ).Value; + } } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IAbpLazyServiceProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IAbpLazyServiceProvider.cs index bfe08026ca..cd5f1da67f 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IAbpLazyServiceProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IAbpLazyServiceProvider.cs @@ -2,18 +2,12 @@ namespace Volo.Abp.DependencyInjection; -public interface IAbpLazyServiceProvider : IServiceProvider +/// +/// This service is equivalent of the . +/// Use instead of this interface, for new projects. +/// +public interface IAbpLazyServiceProvider : ICachedServiceProviderBase { - T GetService(T defaultValue); - - object GetService(Type serviceType, object defaultValue); - - T GetService(Func factory); - - object GetService(Type serviceType, Func factory); - - #region Old Methods - /// /// This method is equivalent of the GetRequiredService method. /// It does exists for backward compatibility. @@ -39,28 +33,26 @@ public interface IAbpLazyServiceProvider : IServiceProvider object LazyGetService(Type serviceType); /// - /// This method is equivalent of the method. + /// This method is equivalent of the method. /// It does exists for backward compatibility. /// T LazyGetService(T defaultValue); /// - /// This method is equivalent of the method. + /// This method is equivalent of the method. /// It does exists for backward compatibility. /// object LazyGetService(Type serviceType, object defaultValue); /// - /// This method is equivalent of the method. + /// This method is equivalent of the method. /// It does exists for backward compatibility. /// object LazyGetService(Type serviceType, Func factory); /// - /// This method is equivalent of the method. + /// This method is equivalent of the method. /// It does exists for backward compatibility. /// T LazyGetService(Func factory); - - #endregion } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ICachedServiceProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ICachedServiceProvider.cs index 073daa135a..4a923901f9 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ICachedServiceProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ICachedServiceProvider.cs @@ -1,6 +1,4 @@ -using System; - -namespace Volo.Abp.DependencyInjection; +namespace Volo.Abp.DependencyInjection; /// /// Provides services by caching the resolved services. @@ -8,7 +6,7 @@ namespace Volo.Abp.DependencyInjection; /// This service's lifetime is scoped and it should be used /// for a limited scope. /// -public interface ICachedServiceProvider : IServiceProvider +public interface ICachedServiceProvider : ICachedServiceProviderBase { } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ICachedServiceProviderBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ICachedServiceProviderBase.cs new file mode 100644 index 0000000000..2e15a45a46 --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ICachedServiceProviderBase.cs @@ -0,0 +1,14 @@ +using System; + +namespace Volo.Abp.DependencyInjection; + +public interface ICachedServiceProviderBase : IServiceProvider +{ + T GetService(T defaultValue); + + object GetService(Type serviceType, object defaultValue); + + T GetService(Func factory); + + object GetService(Type serviceType, Func factory); +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ITransientCachedServiceProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ITransientCachedServiceProvider.cs index 55c43e7c94..7b57b54e07 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ITransientCachedServiceProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ITransientCachedServiceProvider.cs @@ -1,5 +1,3 @@ -using System; - namespace Volo.Abp.DependencyInjection; /// @@ -8,7 +6,7 @@ namespace Volo.Abp.DependencyInjection; /// This service's lifetime is transient. /// for the one with scoped lifetime. /// -public interface ITransientCachedServiceProvider : IServiceProvider +public interface ITransientCachedServiceProvider : ICachedServiceProviderBase { } \ No newline at end of file