System.Runtime.Caching
を保存するために使用していList<MyType>
ます。問題は、コレクションを取得すると、 として返されることSystem.Object
です。
List<MyType>
私はそれを運が悪いことにキャストしようとしました。
私がしようとするとas
、私は得るnull
var siteNodes = _cacheManager.Get(Constants.CacheKeys.SiteNodesCacheKey)
as List<SiteNode>;
List<MyType>
キャッシュに保存して取得する適切な方法は何ですか?
キャッシュ マネージャー クラスを使用してキャッシュにアクセスしています。
public void Add(string key, object data, int cacheTime,
CacheEntryRemovedCallback callback)
{
_callback = callback;
Add(key, data, cacheTime);
}
public object Get(string key)
{
return Cache[key];
}
var siteNodes = _cacheManager.Get(Constants.CacheKeys.SiteNodesCacheKey)
as List<SiteNode>;
キャッシュに追加するメソッドは次のとおりです
public void Add(string key, object data, int cacheTime,
CacheEntryRemovedCallback callback)
{
_callback = callback;
Add(key, data, cacheTime);
}
私の cachemanager クラスと対話するメソッドは次のとおりです。
private void CacheData(IEnumerable<object> data, string cacheKey)
{
if (_cacheManager.Contains(cacheKey))
{
_cacheManager.Remove(cacheKey);
}
_cacheManager.Add(cacheKey, data, DefaultCacheTime);
}
上記のメソッドは私の問題の根源です。メソッドを再利用可能に保つために、保存されているデータを変更するオブジェクトの IEnumerable として最初のパラメータがあります。
そこで、次のオーバーライドを作成しました..
private void CacheData(List<SiteNode> data, string cacheKey)
{
if (_cacheManager.Contains(cacheKey))
{
_cacheManager.Remove(cacheKey);
}
_cacheManager.Add(cacheKey, data, DefaultCacheTime);
}
魔法のように動作します!