using Elsa.Caching.Options;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
namespace Elsa.Caching.Services;
///
public class CacheManager(IMemoryCache memoryCache, IChangeTokenSignaler changeTokenSignaler, IOptions options) : ICacheManager
{
///
public IOptions CachingOptions => options;
///
public IChangeToken GetToken(string key)
{
return changeTokenSignaler.GetToken(key);
}
///
public ValueTask TriggerTokenAsync(string key, CancellationToken cancellationToken = default)
{
return changeTokenSignaler.TriggerTokenAsync(key, cancellationToken);
}
///
public async Task GetOrCreateAsync(object key, Func> factory)
{
var result = await memoryCache.GetOrCreateAsync(key, async entry => await factory(entry));
return result;
}
///
public void Remove(string key)
{
memoryCache.Remove(key);
}
}