我正在开发.NET Core 2.0 Web API并尝试使用IDistributedCache
在不同的调用之间保留一些数据。
为此,我创建了包装器并将其注册为Startup.cs文件中的单例,以便在我的控制器中使用依赖注入。
这就是包装器的外观(简化):
public interface ICacheWrapper
{
Task Set<T>(string name, T obj);
Task<T> TryGet<T>(string name);
}
public class CacheWrapper : ICacheWrapper
{
private readonly IDistributedCache _cache;
private readonly TimeSpan _defaultOffset = new TimeSpan(1, 0, 0, 0);
public CacheWrapper(IDistributedCache cache)
{
_cache = cache;
}
public async Task Set<T>(string name, T obj)
{
await DoSet(name, obj);
}
public async Task<T> TryGet<T>(string name)
{
var data = await Get<T>(name);
}
private async Task DoSet<T>(string name, T obj)
{
var binFormatter = new BinaryConverter();
var array = binFormatter.Serialize(obj);
var options = new DistributedCacheEntryOptions { SlidingExpiration = _defaultOffset };
await _cache.SetAsync(name, array, options);
}
private async Task<T> Get<T>(string name)
{
var binFormatter = new BinaryConverter();
var data = await _cache.GetAsync(name);
if (data == null)
{
return default(T);
}
var obj = binFormatter.Deserialize<T>(data);
return obj;
}
}
我还将此行添加到我的Startup.cs文件中:services.AddDistributedMemoryCache();
问题是:在每个API调用IDistributedCache
对象之间似乎重置 - 它不包含任何数据。我应该怎么做以保持呼叫之间的缓存?
编辑:在SetAsync
缓存包含一个项目之后,我可以确认添加到缓存是否在一个调用的范围内工作。
Edit2 这就是我注册包装器的方式:services.AddSingleton<ICacheWrapper, CacheWrapper>();