using System; using System.Data; using Ease.Core.Utility; using Ease.Core.DataAccess; using System.Collections.Generic; using Microsoft.Extensions.Configuration; using System.IO; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Ease.Core.DataAccess { #region DataAccess: Connection Facory public sealed class DBConnections { private static DbConfig _allConnections = null; private static string _defaultConnection = null; private static readonly object _lock = new object(); public static IConfigurationRoot _configuration; DBConnections() { } public static DbConfig Connections { get { if (_allConnections == null) { lock (_lock) { // create the instance only if the instance is null if (_allConnections == null) { //string str[] = Microsoft.Extensions.Configuration.ConfigurationSection _allConnections = DbConfig.GetConfig(); } } } // Otherwise return the already existing instance return _allConnections; } } public static string DefaultConnection { get { //if (_defaultConnection == null || _defaultConnection == "") //{ // lock (_lock) // { // // create the instance only if the instance is null // if (_defaultConnection == null) // { // _defaultConnection = _allConnections["Default"].ConnectionString; // } // } //} _defaultConnection = "Default"; // Otherwise return the already existing instance return _defaultConnection; } } } public abstract class ConnectionFactory { #region Variable declaration private static int _connectionIdx = 0; private static List _dataSources; private static DbConfig.ConnectionNode _cn; //private static DbConfig _dbCfg = DBConnections.Connections; #endregion #region Properties internal SQLSyntax Syntax { get { return _cn.Syntax; } } internal static Provider Provider { get { return _cn.Provider; } } internal static List DataSources { get { return _dataSources; } } internal static int ConnectionCount { get { return DBConnections.Connections.Names.Length; } } internal DbConfig.ConnectionNode ConnectionNode { get { return _cn; } } /// /// This property is used to point the default database /// public static ConnectionFactory Default { get { //_dataSources = new List(); //If no setting have been found //if (string.IsNullOrEmpty(DBConnections.DefaultConnection)) // throw new ArgumentException(string.Format("Either serviceHandler key in app setting is missing.{0}Or{0}type key in serviceConfiguration is missing.", Environment.NewLine)); ////Preparing Datasources //_dataSources.AddRange(DBConnections.DefaultConnection.Split('~')); //if (_dataSources == null || _dataSources.Count <= 0) // throw new Exception("Data source is not specified in defaultDB."); //Findout actual ConnectionName // if (DBConnections.Connections != null) _cn = DBConnections.Connections[DBConnections.DefaultConnection]; if (_cn == null) throw new Exception(string.Format("Invalid use of configuration setting: {0}", DBConnections.DefaultConnection)); return _cn.Factory; } } #endregion #region Functions internal static void SetConnectionIndex(int connectionIdx) { _connectionIdx = connectionIdx; } /// /// Create an instatnce of connection factory using valid connectioncontext. /// /// Valid connection context. /// Return an instatnce of connection factory. public static ConnectionFactory ContextConnection(ConnectionContext context) { if (context == null || context.ContextKey.Length <= 0) throw new Exception("Invalid use of configuration setting"); //string conKey = ConfigUtility.GetAppSettings(context.ContextKey); ////If no setting have been found //if (string.IsNullOrEmpty(conKey)) // throw new ArgumentException(string.Format("Please use serviceHandler key: {0} in app setting.", context.ContextKey)); if (_cn != null && _cn.Name.Equals(context.ContextKey)) return _cn.Factory; if (DBConnections.Connections != null) _cn = DBConnections.Connections[context.ContextKey]; if (_cn == null) throw new Exception("Invalid use of configuration setting"); return _cn.Factory; } public static ConnectionFactory CreateConnection(Provider provider, SQLSyntax syntax, string connectionString) { if (_cn == null || _cn.ConnectionString.ToLower() != connectionString.ToLower()) { _cn = new DbConfig.ConnectionNode(); _cn.CreateNode(provider, syntax, connectionString); } if (_cn == null) throw new Exception("Invalid use of configuration setting"); return _cn.Factory; } public abstract IDbConnection CreateConnection(); public abstract IDbConnection CreateConnection(ConnectionContext context); #endregion } #endregion }