Используя кэш памяти в приложении asp.net mvc, он создается каждый раз

Environment:
      asp.net mvc
      iis

Я создал оболочку и конкретный класс вокруг memorycache, который в его constrcutor я установил memoryCache

  public class AbijMemoryCache : IAbijMemoryCache
{
    private readonly MemoryCache _cache;

    public AbijMemoryCache()
    {
        if (_cache == null)
        {

            _cache = MemoryCache.Default;

        }
    }
}

затем в unity для получения только одного экземпляра кеша памяти я использовал ContainerControlledLifetimeManager

  container.RegisterType<IAbijMemoryCache, AbijMemoryCache>(new ContainerControlledLifetimeManager());

я установил кеш в моем homeController, используя следующий код

  var policy = new CacheItemPolicy();
  _cache.Set(key, value, policy);

но после загрузки в кеш iis когда-нибудь опустеет.

проверка

        _cache.Get(key) **`it gets null`**

почему он становится нулевым? Что я должен делать?


person Amir Jalali    schedule 12.08.2014    source источник


Ответы (1)


Я считаю, что MemoryCache работает по ссылке, поэтому, если вы назначите объект memoryCache, это будет по ссылке.

  _cache.Set(key, value, policy); //value should not be an object.

вы можете использовать сериализацию перед кэшированием значения, чтобы это можно было сделать как

 var cloneValue = SerializationCloner.DeepFieldClone(value);
person Amir Jalali    schedule 16.08.2014