using System.Threading;
using Umbraco.Core.Configuration;
namespace Umbraco.Core.Persistence
{
///
/// Provides access to the PetaPoco database as Singleton, so the database is created once in app lifecycle.
/// This is necessary for transactions to work properly
///
public sealed class DatabaseFactory
{
#region Singleton
private static Database _database;
private static volatile DatabaseFactory _instance;
private static readonly ReaderWriterLockSlim Lock = new ReaderWriterLockSlim();
private DatabaseFactory() { }
public static DatabaseFactory Current
{
get
{
using (new WriteLock(Lock))
{
if (_instance == null)
{
_instance = new DatabaseFactory();
_database = new Database(GlobalSettings.DbDsn);
}
}
return _instance;
}
}
#endregion
///
/// Returns an instance of the PetaPoco database
///
public Database Database
{
get { return _database; }
}
}
}