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.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<string, string> _cache;
private readonly IProxyScriptManagerCache _cache;
private readonly AbpApiProxyScriptingOptions _options;
public ProxyScriptManager(
IApiDescriptionModelProvider modelProvider,
IOptions<AbpApiProxyScriptingOptions> options,
IServiceProvider serviceProvider,
IJsonSerializer jsonSerializer)
IJsonSerializer jsonSerializer,
IProxyScriptManagerCache cache,
IOptions<AbpApiProxyScriptingOptions> options)
{
_modelProvider = modelProvider;
_options = options.Value;
_serviceProvider = serviceProvider;
_jsonSerializer = jsonSerializer;
_cache = new ConcurrentDictionary<string, string>();
_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)

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