public abstract class AbscractDALFactory
{
private static readonly AbscractDALFactory factory;
static AbscractDALFactory()
{
#region 切换数据工厂
string dbType = ConfigurationManager.AppSettings["dbType"].ToString();
if (dbType == "")
{
throw new Exception(string.Format("从配置文件webconfig中找不到 {0} 的链接字符串配置项!", dbType));
}
switch (dbType.Trim().ToUpper())
{
case "SQL2005":
factory = new SQL2005DALFactory();
break;
case "SQL2000":
factory = new SQL2000DALFactory();
break;
//case "MySQL":
// factory = new MySQLDALFactory();
// break;
}
#endregion
}
/// <summary>
/// 单例,通过静态构造函数产生
/// </summary>
/// <returns></returns>
public static AbscractDALFactory Instance()
{
return factory;
}
/// <summary>
/// 创建各个表的数据提供者
/// </summary>
/// <returns></returns>
public abstract IProductDataProvider CreateProductDataProvider();
public abstract IProductImagesDataProvider CreateProductImagesDataProvider(); }
我想问下这样创建AbscractDALFactory 对象有没有,线程安全的问题,
这个算不算饿汉单例模式,如果不算为什么???
{
private static readonly AbscractDALFactory factory;
static AbscractDALFactory()
{
#region 切换数据工厂
string dbType = ConfigurationManager.AppSettings["dbType"].ToString();
if (dbType == "")
{
throw new Exception(string.Format("从配置文件webconfig中找不到 {0} 的链接字符串配置项!", dbType));
}
switch (dbType.Trim().ToUpper()) 问题开始处 {
case "SQL2005":
factory = new SQL2005DALFactory();
break;
case "SQL2000":
factory = new SQL2000DALFactory();
break;
//case "MySQL":
// factory = new MySQLDALFactory();
// break;
}
#endregion
}
/// <summary>
/// 单例,通过静态构造函数产生
/// </summary>
/// <returns></returns>
public static AbscractDALFactory Instance()
{
return factory;
}
/// <summary>
/// 创建各个表的数据提供者
/// </summary>
/// <returns></returns>
public abstract IProductDataProvider CreateProductDataProvider();
public abstract IProductImagesDataProvider CreateProductImagesDataProvider(); }
在在下表明的问题开始出不论你的数据工厂factory 是否为空你都在new,也就是说你在不断的new对象,有怎么可能实现在整个项目中只有一个AbscractDALFactory的实例呢 你应该在这里做一个判断看你的factory是否有实例了 要是有了就不要new了,Ok了线程方面你你改成单例模式了在讨论吧,呵呵
静态构造函数只会自动调用一次( 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数)
无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数http://msdn.microsoft.com/zh-cn/library/k9x6w0hc(v=VS.100).aspx