代码之家  ›  专栏  ›  技术社区  ›  Darin Dimitrov

如何使用ASP.NET MVC实现自定义缓存提供程序

  •  15
  • Darin Dimitrov  · 技术社区  · 16 年前

    我正在迁移 MonoRail 应用于 ASP.NET MVC 1.0 . 在原始应用程序中,我编写了一个自定义缓存提供程序(使用 memcached )在Monorail中,这项任务非常简单,因为框架使用了接口, ICacheProvider 看起来是这样的:

    public interface ICacheProvider : IProvider, IMRServiceEnabled
    {
        void Delete(string key);
        object Get(string key);
        bool HasKey(string key);
        void Store(string key, object data);
    }
    

    此接口的实例在每个控制器操作中都可用。所以,我所要做的就是实现一个使用memcached和tell的自定义缓存提供程序 Monorail将使用我的缓存提供程序而不是默认提供程序。它也很容易模拟和单元测试我的控制器。

    在ASP.NET MVC 1.0中,有一个System.Web.Abstractions程序集(名称看起来很有希望)定义了 HttpContextBase 这样地:

    public abstract class HttpContextBase : IServiceProvider
    {
        ... 
        public virtual System.Web.Caching.Cache Cache { get; }
        ...
    }
    

    我不理解这里使用的缓存属性是如何抽象缓存提供程序的。它是密封的遗产 Cache 班级。看来我不是唯一一个 struggling to mock 框架中的类。

    我对ASP.NET MVC框架非常陌生,这里一定缺少一些东西。我可以编写一个使用我定义的icacheprovider接口和 我的所有控制器都是从这个基类派生的,但是如果有一个更优雅的(ASP.NET MVCISH)解决方案,我会很乐意实现它。我注意到httpContextBase实现 IServiceProvider . 哪里是 GetService 方法将寻找服务?这很容易被嘲笑吗?

    2 回复  |  直到 13 年前
        1
  •  18
  •   Mauricio Scheffer    15 年前

    缓存没有正式的抽象或提供者,但是您可以轻松地构建一个:

    ASP.NET 4.0包括 output cache provider abstraction (AFAIK) 一般缓存抽象,但仅用于 输出 缓存)

        2
  •  2
  •   M. Mennan Kara    13 年前