Безопасность потоков и управление областью для .NET 4.0 ObjectCache

Я использую новое кэширование .NET 4.0 API, ObjectCache . Я задал несколько вопросов по этой теме в последние несколько дней и намекнул на эту проблему, но подумал, что стоит разбить ее на отдельный вопрос.

Поскольку класс абстрактный, а все методы virtual, это означает, что мы можем создавать наших собственных поставщиков кеш-памяти.

Согласно MSDN, ObjectCache не обязательно должен быть синглтоном, и вы можете создать несколько его экземпляров в своем приложении.

Но для меня это звучит так, как будто нам нужно управлять созданием экземпляра и временем жизни этого объекта?

У меня есть веб-приложение ASP.NET MVC 3 с StructureMap в качестве инъекции зависимости контейнер.

Я хочу иметь единый общий кэш для всего моего веб-приложения.

Итак, я создаю очень простой класс, который обертывает класс ObjectCache и обеспечивает распаковку в методах реализация.

Класс принимает экземпляр ObjectCache в ctor и устанавливает для него частный статический экземпляр кэша, который методы (Add, Get и т. Д.) Работают. .

Например,

public class CacheManager
{
   private static ObjectCache _cache;

   public CacheManager(ObjectCache cache)
   {
      _cache = cache;
   }

   // Add, Get, Remove methods work off _cache instance.
}

Вот мой реестр DI:

For().Singleton().Use().Ctor("cache").Is(MemoryCache.Default);

На английском языке: Когда что-то запрашивает экземпляр CacheManager, используйте одноэлементный экземпляр, и установите для параметра ObjectCache значение экземпляра MemoryCache.

Итак, вот что у меня есть, теперь вопросы:

  1. Если у меня есть класс для обертывания ObjectCache , должен ли этот класс быть синглтон?
  2. MSDN сообщает, что ObjectCache является потокобезопасным, но теперь, когда я использую синглтон, нужен ли мне какой-либо тип блокировки для обеспечения безопасности потоков?
  3. Есть ли частный экземпляр ObjectCache в моем классе-оболочке должен быть статическим? Должен ли сам класс быть статическим?
  4. Общие мысли о моей реализации в целом?

Мне не удалось найти достойный блог / статью о .NET ObjectCache в веб-приложениях ASP.NET, отсюда и замешательство.

Я привык использовать HttpContext.Current.Cache (статический) и не беспокоюсь об управлении временем жизни кеша.

14
задан RPM1984 13 February 2011 в 22:23
поделиться