asp.net-mvc - ServiceStack MemoryCacheClient 不缓存

标签 asp.net-mvc caching servicestack autofac

当涉及到 ServiceStack 时,我是一个相对的菜鸟,并且继承了一个似乎试图利用 MemoryCacheClient 的项目,但似乎没有缓存发生在单个请求的范围之外,例如无论我添加什么到期时间,缓存都不会在请求之间保留。

这是预期的吗?这是 ICacheManager 的实现:

public class CacheManager : ICacheManager
{
    public CacheManager(ICacheClient cacheClient)
    {
        CacheClient = cacheClient;
    }

    public void Clear(IEnumerable<string> cacheKeys)
    {
        Clear(cacheKeys.ToArray());
    }

    public void Clear(params string[] cacheKeys)
    {
        CacheClient.ClearCaches(cacheKeys.ToArray());
    }

    public ICacheClient CacheClient { get; private set; }

    public T Resolve<T>(string cacheKey, Func<T> createCacheFn) where T : class
    {
        return Resolve(cacheKey, new TimeSpan(0, 15, 0), createCacheFn);
    }

    public T Resolve<T>(string cacheKey, TimeSpan expireIn, Func<T> createCacheFn) where T : class
    {
      var cacheResult = CacheClient.Get<T>(cacheKey);
      if (cacheResult != null)
        return cacheResult;

        var item = createCacheFn();
        CacheClient.Set(cacheKey, item, expireIn);
        return item;
    }
}

这是使用 AutoFac ContainerBuilder 连接起来的,如下所示:

_builder.Register(c => new MemoryCacheClient())
    .As<ServiceStack.CacheAccess.ICacheClient>();

_builder.RegisterType<CacheManager>()
    .As<ServiceStack.CacheAccess.ICacheManager>();

最佳答案

MemoryCacheClient 实例必须是唯一的。所以你必须告诉 Autofac 只创建一个实例:

_builder.Register(c => new MemoryCacheClient())
        .As<ServiceStack.CacheAccess.ICacheClient>()
        .SingleInstance();

当您未指定实例范围模式时,Autofac 使用 instancePerDependency :每次解析时都会返回一个新实例。参见 instance scope documentation有关实例范围的更多信息。

关于asp.net-mvc - ServiceStack MemoryCacheClient 不缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29515896/

相关文章:

c# - ASP .NET MVC - 有一个在响应中返回图像的 Controller 方法吗?

asp.net - 在 ASP.NET MVC 中使用 Jquery、AJAX 获取查询字符串值

php - 是什么导致 PHP 中出现 "Unable to allocate memory for pool"?

c - 虚拟内存系统、页表和TLB

c# - ViewBag 作为 session 模型的持有者

c# - 使用多个 MvcSiteMap

javascript - 如何在版本更改时重新加载资源(HTML/CSS/JS)

servicestack - 在 ServiceStack 的元数据页面中反射(reflect) AbstractValidator 规则

c# - 服务堆栈错误构建 View 页面

typescript - 尝试使用 ServiceStack 将 DTO 导入 typescript 时如何使用 'DefaultImports'?