我这里以获得连接字符串为例
public sealed class SConnection
{
//S表示为Singleton设计模式
//该类标记为 sealed 以阻止发生派生,而派生可能会增加实例此外,变量标记为 readonly,这意味着只能在静态初始化期间(此处显示的示例)或在类构造函数中分配变量。
private static SConnection instance;
private static object syncRoot = new Object();//为了解决多线程,而添加的一个附加变量,以避免死锁
private readonly string connectionString;
private SConnection()
{
//禁止在外部被实例化,而只允许在内部实例化
//connectionString = “Data Source=127.0.0.1;Initial Catalog=MyTest;Integrated Security=True;Asynchronous Processing=True;MultipleActiveResultSets=True”;
connectionString = ConfigurationManager.ConnectionStrings[“MySqlConnString”].ConnectionString;
}
public static SConnection Instance
{
get
{
if (instance == null)//第一个进程和第二个进程同时走到此,判断都为true
{
lock (syncRoot)//第一个线程锁定,在释放前不允许其他线程进入,只能等待
{
if (instance == null)//作用是只允许实例化一次,避免再次被实例化
{
instance = new SConnection();
}
}
}
return instance;
}
}
public string ConnectionString
{
get
{
return connectionString;
}
}
}