Как реализовать собственный поставщик кэша с помощью ASP.NET MVC
-
22-08-2019 - |
Вопрос
Я мигрирую МоноРейл заявление на АСП.NET MVC 1.0.В моем исходном приложении я написал собственный поставщик кэша (поставщик распределенного кэша, использующий кэширование памяти).В 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 является абстракцией поставщика кэша.Это наследие запечатано Кэш сорт.Кажется, я не один такой изо всех сил пытаюсь высмеять из классов в рамках.
Я новичок в платформе ASP.NET MVC и, должно быть, что-то здесь упускаю.Я мог бы написать CustombaseController, который использует интерфейс Icacheprovider, который я определяю, и все мои контроллеры получают из этого базового класса, но если есть более элегантное решение (ASP.Net MVCISH), я был бы рад его реализовать.Я заметил, что HttpContextBase реализует IServiceProvider.Где GetService метод будешь искать сервисы?Можно ли легко высмеять это?
Решение
У Cache нет официальной абстракции или поставщика, но вы можете легко его создать:
- 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 включает в себя абстракция поставщика кэша вывода (НАСКОЛЬКО МНЕ ИЗВЕСТНО нет общая абстракция кэша, но только для выход кэширование)
Другие советы
Этот ответ устарел.Видеть АСП.NET 4.0:Написание пользовательских поставщиков кэша вывода.