Comment implémenter un fournisseur de cache personnalisé avec ASP.NET MVC

Je suis à la migration d'un MonoRail application de ASP.NET MVC 1.0. Dans mon application, j'ai écrit une coutume fournisseur de cache (cache distribué fournisseur à l'aide de memcached). MonoRail cette tâche a été très facile, parce que le cadre utilisé interfaces et il est ICacheProvider qui ressemble à ceci:

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

Une instance de cette interface est disponible dans chaque contrôleur de l'action. Donc, tout ce que j'avais à faire était de mettre en œuvre un fournisseur de cache personnalisé qui utilise memcached et dire
MonoRail à utiliser mon fournisseur de cache au lieu de celui par défaut. Il est également très facile de se moquer et de l'unité de test de mon contrôleur.

Dans ASP.NET MVC 1.0, il y a le Système.Web.Les Abstractions de l'assemblée (le nom a l'air prometteur) qui définit la HttpContextBase comme ceci:

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

Je ne comprends pas comment la propriété du Cache utilisé ici est une abstraction d'un fournisseur de cache. C'est le patrimoine scellé Cache classe. Il semble que je ne suis pas le seul de la difficulté à se moquer de les classes dans le cadre.

Je suis très nouveau à l'ASP.NET framework MVC et je dois manquer quelque chose ici. Je pourrais écrire un CustomBaseController qui utilise un ICacheProvider interface que j'définir et
tous mes contrôleurs de dériver de cette classe de base, mais si il y a de plus élégant (ASP.NET MVCish) solution je serais heureux de le mettre en œuvre. J'ai remarqué que HttpContextBase implémente IServiceProvider. Où est la La méthode GetService méthode d'aller le chercher pour les services? Cela peut facilement être moqué?

source d'informationauteur Darin Dimitrov