mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-20 10:40:29 +01:00
41 lines
1.5 KiB
C#
41 lines
1.5 KiB
C#
using System;
|
|
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
|
|
namespace BTCPayServer.Services.Rates
|
|
{
|
|
public class CachedDefaultRateProviderFactory : IRateProviderFactory
|
|
{
|
|
IMemoryCache _Cache;
|
|
ConcurrentDictionary<string, IRateProvider> _Providers = new ConcurrentDictionary<string, IRateProvider>();
|
|
ConcurrentDictionary<string, IRateProvider> _LongCacheProviders = new ConcurrentDictionary<string, IRateProvider>();
|
|
|
|
public IMemoryCache Cache
|
|
{
|
|
get
|
|
{
|
|
return _Cache;
|
|
}
|
|
}
|
|
|
|
public CachedDefaultRateProviderFactory(IMemoryCache cache)
|
|
{
|
|
if (cache == null)
|
|
throw new ArgumentNullException(nameof(cache));
|
|
_Cache = cache;
|
|
}
|
|
|
|
public IRateProvider RateProvider { get; set; }
|
|
|
|
public TimeSpan CacheSpan { get; set; } = TimeSpan.FromMinutes(1.0);
|
|
public TimeSpan LongCacheSpan { get; set; } = TimeSpan.FromMinutes(15.0);
|
|
public IRateProvider GetRateProvider(BTCPayNetwork network, bool longCache)
|
|
{
|
|
return (longCache ? _LongCacheProviders : _Providers).GetOrAdd(network.CryptoCode, new CachedRateProvider(network.CryptoCode, RateProvider ?? network.DefaultRateProvider, _Cache) { CacheSpan = longCache ? LongCacheSpan : CacheSpan, AdditionalScope = longCache ? "LONG" : "SHORT" });
|
|
}
|
|
}
|
|
}
|