Как реализовать пользовательский поставщик кеша с ASP.NET MVC - PullRequest
15 голосов
/ 17 мая 2009

Я мигрирую MonoRail приложение в ASP.NET MVC 1.0 . В моем исходном приложении я написал собственный поставщик кэша (поставщик распределенного кэша, использующий memcached ). В MonoRail эта задача была очень простой, потому что в фреймворке использовались интерфейсы, и ICacheProvider выглядит следующим образом:

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

Экземпляр этого интерфейса доступен в каждом действии контроллера. Итак, все, что мне нужно было сделать, это реализовать собственный поставщик кэша, который использует memcached и сказать MonoRail использовать мой провайдер кеша вместо провайдера по умолчанию. Также было очень легко издеваться и тестировать мой контроллер.

В ASP.NET MVC 1.0 есть сборка System.Web.Abstractions (имя выглядит многообещающе), которая определяет HttpContextBase следующим образом:

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

Я не понимаю, как используемое здесь свойство Cache является абстракцией поставщика кеша. Это наследие запечатанного Cache класса. Кажется, я не единственный, кто изо всех сил пытается макетировать классы в рамках.

Я очень новичок в ASP.NET MVC Framework, и я должен что-то здесь упустить. Я мог бы написать CustomBaseController, который использует интерфейс ICacheProvider, который я определяю и все мои контроллеры являются производными от этого базового класса, но если есть более элегантное (ASP.NET MVCish) решение, я был бы рад его реализовать. Я заметил, что HttpContextBase реализует IServiceProvider . Где метод GetService будет искать службы? Может ли это быть легко издеваться?

Ответы [ 2 ]

18 голосов
/ 17 мая 2009

Кэш не имеет официальной абстракции или поставщика, но вы можете легко создать его:

ASP.NET 4.0 включает абстракцию поставщика кэша вывода (AFAIK не общая абстракция кэша, но только для вывода кэширование)

2 голосов
/ 05 августа 2012
...