只是有一個關於PetaPoco生成的版本4.0.3的Database.cs代碼的問題。請參見下面的代碼片段:PetaPoco GetInstance()總是返回新的實例?
public partial class postgresqlDB : Database
{
public postgresqlDB()
: base("postgresql")
{
CommonConstruct();
}
public postgresqlDB(string connectionStringName)
: base(connectionStringName)
{
CommonConstruct();
}
partial void CommonConstruct();
public interface IFactory
{
postgresqlDB GetInstance();
}
public static IFactory Factory { get; set; }
public static postgresqlDB GetInstance()
{
if (_instance!=null)
return _instance;
if (Factory!=null)
return Factory.GetInstance();
else
return new postgresqlDB();
}
[ThreadStatic] static postgresqlDB _instance;
public override void OnBeginTransaction()
{
if (_instance==null)
_instance=this;
}
public override void OnEndTransaction()
{
if (_instance==this)
_instance=null;
}
.....
..... <snip />
望着GetInstance()
功能,那爲什麼在return new postgresqlDB()
永遠不會分配給私有變量_instance
?
這是不是意味着每次致電GetInstance()
都會創建新實例,因爲if (_instance != null) return _instance;
永遠不會是真的?
謝謝大家的幫助。
你有CommonConstruct()的代碼嗎?我假設它可能在那裏設置變量 – 2012-07-24 03:03:18
它是由PetaPoco通過TT模板生成的代碼。開箱即用,這就是全部。我只是好奇爲什麼在生成的代碼中沒有'_instance'的賦值。 – Spongebob 2012-07-24 03:52:14