예제 #1
0
파일: Program.cs 프로젝트: Varunda/flash
#pragma warning restore CS8618 // Non-nullable field is uninitialized. Consider declaring as nullable.

        public static async Task Main(string[] args)
        {
            Console.WriteLine($"Starting at {DateTime.UtcNow}");

            _ = Task.Run(async() => {
                try {
                    IHostBuilder builder = CreateHostBuilder(args);
                    _Host = builder.Build();

                    using (IServiceScope? scope = _Host.Services.CreateScope()) {
                        if (scope != null)
                        {
                            IDbCreator creator = scope.ServiceProvider.GetRequiredService <IDbCreator>();

                            await creator.Execute();
                            Console.WriteLine($"Executed IDbCreator");
                        }
                    }

                    await _Host.RunAsync();
                } catch (Exception ex) {
                    Console.Error.WriteLine(ex.Message);
                }
            });

            await Task.Delay(1000);

            if (_Host == null)
            {
                Console.Error.WriteLine($"Host is null, cannot add commands");
            }
            else
            {
                ICommandBus?commands = _Host.Services.GetService(typeof(ICommandBus)) as ICommandBus;
                if (commands == null)
                {
                    Console.Error.WriteLine($"Missing ICommandBus");
                }

                string line = "";
                while (line != ".close")
                {
                    line = Console.ReadLine();

                    if (line == ".close")
                    {
                        break;
                    }
                    else
                    {
                        if (commands != null)
                        {
                            await commands.Execute(line);
                        }
                    }
                }

                await _Host.StopAsync();
            }
        }
예제 #2
0
        /// <summary>
        /// Creates DB according CDBObject
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string CreateDatabase(DataBaseInfo obj, string connectionString, string login = null, string password = null)
        {
            IDbCreator creator = null;

            switch (obj.DbmsType)
            {
            case DbmsType.SqlServer:
                creator = new SqlServerCreator(obj.Name);
                break;
            }
            string cs;

            if (obj.IsPublic)
            {
                cs = creator.CreateNewDatabaseWithRandomLogin();
            }
            else if (!string.IsNullOrEmpty(login) && !string.IsNullOrEmpty(password))
            {
                cs = creator.CreateNewDatabaseWithProtection(login, password);
            }
            else
            {
                throw new ArgumentException("Lack of arguments.");
            }

            cs = cs.Replace("SERVERNAME", connectionString);
            return(cs);
        }
예제 #3
0
        private static IDbCreator msSqlCreator;//使用静态变量缓存MsSqlDbCreator

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="connectString"></param>
        public MsSqlDbProvider(string connectString) : base(connectString)
        {
            if (msSqlCreator == null)
            {
                msSqlCreator = new MsSqlDbCreator();
            }
            this.dbCreator = msSqlCreator;
        }
예제 #4
0
 private static IDbCreator sqliteCreator;//使用静态变量缓存MsSqlDbCreator
 /// <summary>
 /// Ctor
 /// </summary>
 /// <param name="connectString"></param>
 public SqliteDbProvider(string connectString) : base(connectString)
 {
     if (sqliteCreator == null)
     {
         sqliteCreator = new SqliteDbCreator();
     }
     this.dbCreator = sqliteCreator;
 }
예제 #5
0
        private static IDbCreator postgreSqlCreator;//使用静态变量缓存PostgreSqlDbCreator

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="connectString"></param>
        public PostgreSqlDbProvider(string connectString) : base(connectString)
        {
            if (postgreSqlCreator == null)
            {
                postgreSqlCreator = new PostgreSqlDbCreator();
            }
            this.dbCreator = postgreSqlCreator;
        }
예제 #6
0
        private static IDbCreator postgreSqlCreator;//使用静态变量缓存PostgreSqlDbCreator

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="connectString"></param>
        public PostgreSqlDbProvider(string connectString) : base(connectString)
        {
            if (postgreSqlCreator == null)
            {   //使用静态变量缓存PostgreSqlDbCreator
                Assembly assembly;
                string   assemblyName = "Jc.Core.PostgreSql";
                string   className    = "PostgreSqlDbCreator";
                try
                {
                    //assembly = Assembly.LoadFrom($"{assemblyName}.dll");
                    assembly = Assembly.Load($"{assemblyName}");
                }
                catch
                {
                    throw new Exception($"加载{className}访问模块失败.请检查是否已添加{assemblyName}引用.");
                }
                IDbCreator dbCreator = assembly.CreateInstance($"{assemblyName}.{className}") as IDbCreator;
                ExHelper.ThrowIfNull(dbCreator, $"加载{className}失败.");
                postgreSqlCreator = dbCreator;
            }
            this.dbCreator = postgreSqlCreator;
        }
예제 #7
0
        private static void CreateDatabaseIfNotExists(IConfigurationRoot configuration, IDbCreator dbCreator, string providerName, ILogger logger)
        {
            var databaseScriptList = configuration["DWKit:DatabaseScriptList"];

            if (string.IsNullOrWhiteSpace(databaseScriptList))
            {
                databaseScriptList = Path.Combine("..", "DB", providerName, "create_db.txt");
            }

            if (!File.Exists(databaseScriptList))
            {
                logger?.LogWarning($"Script list file for database creation doesn't exist. Expected file path: {databaseScriptList}");
            }
            else
            {
                dbCreator.CreateDatabaseIfNotExists(databaseScriptList, logger);
            }
        }