Jas*_*son 2 c# singleton design-patterns
暂时搁置关于单例模式的相对优点和缺点的争论,考虑到单例通常被认为是在应用程序的生命周期内持续存在的实例,那么最好的方法是什么?生命有限的单身人士?
以下内容是否有任何问题:
public class CategoryHandler
{
private static DateTime m_expires;
public bool HasExpired
{
get return DateTime.Now > m_expires;
}
private CategoryHandler()
{
m_expires = DateTime.Now.AddMinutes(60);
}
public static CategoryHandler Instance()
{
if(HasExpired)
{
//Dispose and reconstruct
}
else
{
//Use existing instance
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者有没有更好的方法来解决这个问题?
您需要某种锁定来确保线程安全:
public sealed class CategoryHandler
{
private static CategoryHandler _instance = null;
private static DateTime _expiry = DateTime.MinValue;
private static readonly object _lock = new object();
private CategoryHandler() { }
public static bool HasExpired
{
get
{
lock (_lock) { return (_expiry < DateTime.Now); }
}
}
public static CategoryHandler Instance
{
get
{
lock (_lock)
{
if (HasExpired)
{
// dispose and reconstruct _instance
_expiry = DateTime.Now.AddMinutes(60);
}
return _instance;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)