Я использую новый API кэширования .NET 4.0, ObjectCache. Я задал несколько вопросов в этой области за последние несколько дней, и я намекнул на эту проблему, но подумал, что стоит разбить ее на собственный вопрос.
Поскольку класс является абстрактным и все методы являются виртуальными, это означает, что мы можем создавать собственные собственные поставщики кэша.
В соответствии с MSDN, ObjectCache не должен быть одиночным, и вы можете создать несколько экземпляров в своем приложении.
Но для меня это похоже на то, что нам нужно управлять конкретизацией и временем жизни этого объекта?
У меня есть веб-приложение ASP.NET MVC 3 с StructureMap в качестве контейнера для инъекций зависимостей.
Я хочу иметь один общий кэш для всего веб-приложения.
Итак, я создаю очень простой класс, который обертывает класс ObjectCache и предоставляет распаковку в реализации методов.
Класс принимает экземпляр ObjectCache в ctor и устанавливает его в экземпляр  private static кэша, который отключает методы (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<CacheManager>().Singleton().Use<CacheManager>().Ctor<ObjectCache>("cache").Is(MemoryCache.Default);
По-английски: Когда что-то запрашивает экземпляр CacheManager, используйте экземпляр singleton и задайте параметр ObjectCache как экземпляр MemoryCache.
Итак, что у меня есть, теперь вопросы:
-  Если у меня есть класс для обертывания ObjectCache, должен ли этот класс быть одиночным?
-  MSDN говорит, что ObjectCacheявляется потокобезопасным, но теперь, когда я использую singleton, мне нужен какой-либо блокировки для обеспечения безопасности потока?
-  Является ли частный экземпляр ObjectCacheв моем классе-оболочке статическим? Должен ли сам класс быть статическим?
- Общие мысли о моей общей реализации?
Мне не удалось найти достойный блог/статью о .NET ObjectCache в веб-приложениях ASP.NET, отсюда и моя путаница.
Я использую HttpContext.Current.Cache (который является статическим) и не заботится о управлении жизненным циклом для кэша.
