Frage

Ich bin Migration eine Monorail Anwendung auf ASP.NET MVC 1.0 . In meiner ursprünglichen Anwendung schrieb ich einen benutzerdefinierten Cache-Provider (ein verteilter Cache-Provider Memcached verwenden). In Monorail war diese Aufgabe sehr einfach, da das Framework-Schnittstellen verwendet, und es gibt ICacheProvider die wie folgt aussieht folgt aus:

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

Eine Instanz dieser Schnittstelle ist in jeder Controller-Aktion zur Verfügung. Also, alles, was ich tun musste, war einen eigenen Cache-Provider zu implementieren, die Memcached verwendet und sagt Monorail zu meinem Cache-Provider statt des einen Standard zu verwenden. Es war auch sehr einfach zu verspotten und Einheit testet meinen Controller.

In ASP.NET MVC 1.0 gibt es den System.Web.Abstractions Baugruppe (Name sieht vielversprechend aus), dass die Httpcontextbase wie folgt aus:

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

Ich verstehe nicht, wie die Cache-Eigenschaft verwendet hier ist eine Abstraktion eines Cache-Provider. Es ist das Vermächtnis versiegelt Cache Klasse. Es scheint, dass ich bin nicht der einzige, kämpft aus den Klassen im Rahmen zu verspotten.

Ich bin sehr neu in der ASP.NET MVC-Framework und ich muss hier etwas fehlen. Ich könnte einen CustomBaseController schreiben, die eine ICacheProvider-Schnittstelle verwendet, die wir definieren und alle meine Controller von dieser Basisklasse ableiten, aber wenn es eine elegantere (ASP.NET MVCish) Lösung ist würde ich mich freuen, es zu implementieren. Ich habe bemerkt, dass Httpcontextbase implementiert IServiceProvider . Wo ist der GetService Methode für das Gehen suchen Dienstleistungen? Kann dies leicht spotten?

War es hilfreich?

Lösung

Cache gibt es keine offizielle Abstraktion oder Provider hat, aber man kann man sich leicht erstellen:

ASP.NET 4.0 enthält eine Ausgabe-Cache-Provider Abstraktion (AFAIK nicht eine allgemeine Cache Abstraktion, sondern nur für Ausgang Caching)

Andere Tipps

Diese Antwort ist veraltet. Siehe

scroll top