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?