Question

J'émigre une application monorail ASP.NET MVC 1.0 . Dans ma demande originale j'ai écrit un fournisseur de cache personnalisé (un fournisseur de cache distribué en utilisant memcached). En monorail cette tâche a été très facile parce que le cadre utilisé des 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 action du contrôleur. Donc, tout ce que je devais faire était de mettre en œuvre un fournisseur de cache personnalisé qui utilise memcached et dire Monorail utiliser mon fournisseur de cache au lieu du défaut. Il est également très facile de se moquer et de l'unité tester mon contrôleur.

Dans ASP.NET MVC 1.0, il y a l'ensemble de System.Web.Abstractions (nom semble prometteur) qui définit le 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. Il est l'héritage scellé Cache classe. Il semble que je ne suis pas le seul du mal à se moquer les cours dans le cadre.

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

Était-ce utile?

La solution

Cache ne possède pas d'abstraction officielle ou fournisseur, mais vous pouvez facilement construire un:

ASP.NET 4.0 comprend un sortie abstraction de fournisseur de cache (AFAIK pas une abstraction de cache général, mais seulement pour sortie cache)

Autres conseils

Cette réponse est obsolète. Voir

scroll top