只是有一个关于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