MemoryCache.Default создается для двух разных экземпляров при вызове метода из двух разных классов

Я надеюсь, что кто-то может помочь мне понять, почему C# MemoryCache не работает так, как он должен.

У меня есть библиотека DLL, содержащая открытый статический класс. Этот статический класс имеет функции для добавления / получения строк из кэша памяти по умолчанию. Это одна длл. Вот код:

using System;
using System.Runtime.Caching;

namespace ClassHelper
{
    public static class CacheHelper
    {
        private static MemoryCache cache = MemoryCache.Default;
        private static CacheEntryRemovedCallback callback = null;
        private static CacheItemPolicy policy = null;

        public static void Add(string key, string value)
        {
            callback = new CacheEntryRemovedCallback(MyCachedItemRemovedCallback);
            policy = new CacheItemPolicy();
            policy.AbsoluteExpiration = DateTime.UtcNow.AddDays(5);
            policy.RemovedCallback = callback;

            cache.Set(key, value, policy);
        }

        public static bool Exists(string key)
        {
            if (cache.Contains(key))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static object Get(string key)
        {
            return cache.Get(key);
        }

        public static void Remove(string key)
        {
            cache.Remove(key);
        }

        private static void MyCachedItemRemovedCallback(CacheEntryRemovedArguments arguments) 
        { 
            // Log these values from arguments list 
            String strLog = String.Concat("Reason: ", arguments.RemovedReason.ToString(), " | Key-Name: ", arguments.CacheItem.Key, " | Value-Object: ", arguments.CacheItem.Value.ToString()); 
        }
    }
}

Затем у меня есть другой класс (не статический), который вызывает, использует класс CacheHelper для добавления / получения элементов в / из кэша. Это еще одна DLL. Эта dll используется во время выполнения дважды в последовательности (последовательности 1 и 2). Это компонент конвейера BizTalk, если это поможет. Когда этот класс запускается в первый раз, я вижу, что объекты добавляются в кэш памяти "По умолчанию" для последовательности 1; однако, когда этот класс находится в последовательности 2, кэш памяти по умолчанию становится пустым. Странная часть в том, что, если я снова запустил класс, я вижу, что предыдущие сообщения все еще находятся в кеше для последовательности 1, но для последовательности 2 снова появляется пустой кеш. Похоже, что статический класс создается дважды с двумя разными Кэш памяти по умолчанию. Это потому, что BizTalk загружает компонент отдельно для каждого конвейера? Если это так, как я могу реализовать общий кеш, используя MemoryCache.Default?

0 ответов

Другие вопросы по тегам