Я использую данный шаблон singleton для кэширования объекта класса в ASP.NET. Может ли кто-нибудь выделить недостатки этого подхода?Disadvanage данного Singleton cache patterm
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; }
}
Я не знаю, если бы я назвал это синглтон, как таковой. Это просто статическая обертка поверх нестатических данных. Это в основном то, что делает HttpContext.Current', вы просто добавляете помощники, специфичные для вашего приложения. Я не вижу никаких проблем с этим. – Yuck
небезопасный поток, но еще до этого - что вы пытаетесь сделать в методах 'getInstance' и' ReportRemovedCallback'? – YavgenyP