3

特定のシングルトン パターンを使用して、ASP.NET でクラス オブジェクトをキャッシュしています。このアプローチの欠点を強調できる人はいますか?

public class CacheManager
{
private static CacheManager _instance;

protected CacheManager(string key) { id = key; }
public static CacheManager getInstance(string key)
{
   if (HttpContext.Current.Cache[key] == null)
       HttpContext.Current.Cache.Insert(key, _instance = new CacheManger(key), null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(120),CacheItemPriority.Default,new CacheItemRemovedCallback(ReportRemovedCallback));

   return (CacheManager)HttpContext.Current.Cache[key];
}

private static void ReportRemovedCallback(string CacheManager, object value, CacheItemRemovedReason reason)
{            
    _instance = null;
}

public string id { get; private set; }        
public string field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }        
}
4

1 に答える 1

2

これをシングルトンにする理由がわかりません。値を取得/設定する各プロパティのラッパーを作成するだけです。そうすれば、IoC コンテナーを使用してはるかに簡単に注入し、テスト容易性を高めることができます。

現状では、コードはスレッド セーフではないため、問題が発生する可能性もあります。

于 2013-03-06T13:34:59.910 に答える