Browse Source

Extract IProxyScriptManagerCache. Make ProxyScriptManager transient.

pull/1406/head
Halil İbrahim Kalkan 7 years ago
parent
commit
d27fccc523
  1. 11
      framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/IProxyScriptManagerCache.cs
  2. 26
      framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs
  3. 27
      framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManagerCache.cs

11
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<string> factory);
void Set(string key, string value);
}
}

26
framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs

@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -11,37 +10,40 @@ using Volo.Abp.Json;
namespace Volo.Abp.Http.ProxyScripting namespace Volo.Abp.Http.ProxyScripting
{ {
public class ProxyScriptManager : IProxyScriptManager, ISingletonDependency public class ProxyScriptManager : IProxyScriptManager, ITransientDependency
{ {
private readonly IApiDescriptionModelProvider _modelProvider; private readonly IApiDescriptionModelProvider _modelProvider;
private readonly AbpApiProxyScriptingOptions _options;
private readonly IServiceProvider _serviceProvider; private readonly IServiceProvider _serviceProvider;
private readonly IJsonSerializer _jsonSerializer; private readonly IJsonSerializer _jsonSerializer;
private readonly IProxyScriptManagerCache _cache;
private readonly ConcurrentDictionary<string, string> _cache; private readonly AbpApiProxyScriptingOptions _options;
public ProxyScriptManager( public ProxyScriptManager(
IApiDescriptionModelProvider modelProvider, IApiDescriptionModelProvider modelProvider,
IOptions<AbpApiProxyScriptingOptions> options,
IServiceProvider serviceProvider, IServiceProvider serviceProvider,
IJsonSerializer jsonSerializer) IJsonSerializer jsonSerializer,
IProxyScriptManagerCache cache,
IOptions<AbpApiProxyScriptingOptions> options)
{ {
_modelProvider = modelProvider; _modelProvider = modelProvider;
_options = options.Value;
_serviceProvider = serviceProvider; _serviceProvider = serviceProvider;
_jsonSerializer = jsonSerializer; _jsonSerializer = jsonSerializer;
_cache = cache;
_cache = new ConcurrentDictionary<string, string>(); _options = options.Value;
} }
public string GetScript(ProxyScriptingModel scriptingModel) public string GetScript(ProxyScriptingModel scriptingModel)
{ {
var cacheKey = CreateCacheKey(scriptingModel);
if (scriptingModel.UseCache) 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) private string CreateScript(ProxyScriptingModel scriptingModel)

27
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<string, string> _cache;
public ProxyScriptManagerCache()
{
_cache = new ConcurrentDictionary<string, string>();
}
public string GetOrAdd(string key, Func<string> factory)
{
return _cache.GetOrAdd(key, factory);
}
public void Set(string key, string value)
{
_cache[key] = value;
}
}
}
Loading…
Cancel
Save