调用之间不共享.net core 2.0中的IDistributedCache

时间:2017-12-29 12:04:07

标签: c# asp.net-core .net-core

我正在开发.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>();

0 个答案:

没有答案