From d27fccc523634be0e4a3d01fe287d9271712383a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 28 Jun 2019 19:23:32 +0300 Subject: [PATCH] Extract IProxyScriptManagerCache. Make ProxyScriptManager transient. --- .../IProxyScriptManagerCache.cs | 11 ++++++++ .../Http/ProxyScripting/ProxyScriptManager.cs | 26 +++++++++--------- .../ProxyScripting/ProxyScriptManagerCache.cs | 27 +++++++++++++++++++ 3 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/IProxyScriptManagerCache.cs create mode 100644 framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManagerCache.cs diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/IProxyScriptManagerCache.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/IProxyScriptManagerCache.cs new file mode 100644 index 0000000000..0383fddcfd --- /dev/null +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/IProxyScriptManagerCache.cs @@ -0,0 +1,11 @@ +using System; + +namespace Volo.Abp.Http.ProxyScripting +{ + public interface IProxyScriptManagerCache + { + string GetOrAdd(string key, Func factory); + + void Set(string key, string value); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs index d87d20df9e..1b89de2b3a 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Concurrent; using System.Collections.Generic; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -11,37 +10,40 @@ using Volo.Abp.Json; namespace Volo.Abp.Http.ProxyScripting { - public class ProxyScriptManager : IProxyScriptManager, ISingletonDependency + public class ProxyScriptManager : IProxyScriptManager, ITransientDependency { private readonly IApiDescriptionModelProvider _modelProvider; - private readonly AbpApiProxyScriptingOptions _options; private readonly IServiceProvider _serviceProvider; private readonly IJsonSerializer _jsonSerializer; - - private readonly ConcurrentDictionary _cache; + private readonly IProxyScriptManagerCache _cache; + private readonly AbpApiProxyScriptingOptions _options; public ProxyScriptManager( IApiDescriptionModelProvider modelProvider, - IOptions options, IServiceProvider serviceProvider, - IJsonSerializer jsonSerializer) + IJsonSerializer jsonSerializer, + IProxyScriptManagerCache cache, + IOptions options) { _modelProvider = modelProvider; - _options = options.Value; _serviceProvider = serviceProvider; _jsonSerializer = jsonSerializer; - - _cache = new ConcurrentDictionary(); + _cache = cache; + _options = options.Value; } public string GetScript(ProxyScriptingModel scriptingModel) { + var cacheKey = CreateCacheKey(scriptingModel); + if (scriptingModel.UseCache) { - return _cache.GetOrAdd(CreateCacheKey(scriptingModel), (key) => CreateScript(scriptingModel)); + return _cache.GetOrAdd(cacheKey, () => CreateScript(scriptingModel)); } - return _cache[CreateCacheKey(scriptingModel)] = CreateScript(scriptingModel); + var script = CreateScript(scriptingModel); + _cache.Set(cacheKey, script); + return script; } private string CreateScript(ProxyScriptingModel scriptingModel) diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManagerCache.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManagerCache.cs new file mode 100644 index 0000000000..d725a21359 --- /dev/null +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManagerCache.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Http.ProxyScripting +{ + public class ProxyScriptManagerCache : IProxyScriptManagerCache, ISingletonDependency + { + private readonly ConcurrentDictionary _cache; + + public ProxyScriptManagerCache() + { + _cache = new ConcurrentDictionary(); + } + + public string GetOrAdd(string key, Func factory) + { + return _cache.GetOrAdd(key, factory); + } + + public void Set(string key, string value) + { + _cache[key] = value; + } + } +} \ No newline at end of file