Como implementar um provedor de cache personalizado com ASP.NET MVC
-
22-08-2019 - |
Pergunta
Eu estou migrando um href="http://castleproject.org/monorail/index.html" rel="noreferrer"> aplicação para ASP.NET MVC 1.0 . Na minha aplicação original que eu escrevi um provedor de cache personalizado (um provedor de cache distribuído usando memcached ). Em MonoRail esta tarefa foi muito fácil porque a estrutura utilizada interfaces e não é ICacheProvider que parece isto:
public interface ICacheProvider : IProvider, IMRServiceEnabled
{
void Delete(string key);
object Get(string key);
bool HasKey(string key);
void Store(string key, object data);
}
Uma instância desta interface está disponível em cada ação do controlador. Então, tudo o que eu tinha a fazer era implementar um provedor de cache personalizado que usa o memcached e dizer MonoRail para usar o meu provedor de cache em vez do padrão. Foi também muito fácil de zombar e teste de unidade meu controlador.
Em ASP.NET MVC 1.0, há os System.Web.Abstractions montagem (nome parece promissor) que define a HttpContextBase assim:
public abstract class HttpContextBase : IServiceProvider
{
...
public virtual System.Web.Caching.Cache Cache { get; }
...
}
Eu não entendo como a propriedade de cache usado aqui é uma abstração de um provedor de cache. É o legado selado Cache classe. Parece que eu não sou o único lutando para zombar as classes no quadro.
Eu sou muito novo para o quadro ASP.NET MVC e eu deve estar faltando alguma coisa aqui. Eu poderia escrever um CustomBaseController que usa uma interface ICacheProvider que eu definir e todos os meus controladores derivar dessa classe base, mas se há uma solução mais elegante (ASP.NET MVCish) Eu ficaria feliz em implementá-lo. Tenho notado que HttpContextBase implementos IServiceProvider . Onde está o método GetService vai procurar Serviços? Isso pode ser facilmente ridicularizado?
Solução
Cache não tem uma abstração ou o fornecedor oficial, mas você pode facilmente construir um:
- http://weblogs.asp.net/ zowens / Arquivo / 2008/08/04 / cache-abstraction.aspx
- http://memcachedproviders.codeplex.com/SourceControl/changeset/view/ 15983 # 58762
ASP.NET 4.0 inclui um provedor de cache de saída abstração (AFAIK não uma abstração geral cache, mas apenas para saída caching)
Outras dicas
Esta resposta está desatualizado. Veja ASP.NET 4.0: provedores de cache de saída personalizada escrita
.