Come implementare un provider di cache personalizzato con ASP.NET MVC
-
22-08-2019 - |
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?
Soluzione
Cache non ha un'astrazione ufficiale o fornitore, ma si può facilmente costruire uno:
- http://weblogs.asp.net/ zowens / archive / 2008/08/04 / cache-abstraction.aspx
- http://memcachedproviders.codeplex.com/SourceControl/changeset/view/ 15983 # 58762
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
Questa risposta è obsoleto. Vedere ASP.NET 4.0:. Scrivendo uscita personalizzato fornitori di cache