Domanda

sto migrando un monorotaia applicazione per ASP.NET MVC 1.0 . Nella mia applicazione originale che ho scritto un provider di cache personalizzato (un provider di cache distribuita utilizzando memcached ). In monorotaia questo compito è stato molto facile perché il quadro utilizzato interfacce e non v'è ICacheProvider che assomiglia in questo modo:

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

Un esempio di questa interfaccia è disponibile in ogni azione del controller. Quindi, tutto quello che dovevo fare era di implementare un provider di cache personalizzata che utilizza memcached e dire Monorotaia per usare il mio fornitore di cache invece di quello predefinito. E 'stato anche molto facile da prendere in giro e l'unità di testare il mio controller.

In ASP.NET MVC 1.0 c'è l'assemblea System.Web.Abstractions (nome sembra essere molto promettente) che definisce la HttpContextBase in questo modo:

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

Non capisco come la proprietà Cache usato qui è un'astrazione di un fornitore di cache. E 'l'eredità sigillato Cache classe. Sembra che io non sono l'unico a che lotta per deridere le classi nel quadro.

Sono molto nuovo per il framework ASP.NET MVC e devo essere perso qualcosa qui. Potrei scrivere un CustomBaseController che utilizza un'interfaccia ICacheProvider che definisco e tutti i miei controllori derivano da questa classe di base, ma se c'è una soluzione più elegante (ASP.NET MVCish) Sarei felice per la sua attuazione. Ho notato che HttpContextBase implementa IServiceProvider . Dov'è il GetService metodo andando a cercare Servizi? Può questo essere facilmente preso in giro?

È stato utile?

Soluzione

Cache non ha un'astrazione ufficiale o fornitore, ma si può facilmente costruire uno:

ASP.NET 4.0 include un uscita fornitore di cache di astrazione (per quanto ne so non una cache un'astrazione generale, ma solo per di uscita caching)

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top