private static IWebHost BuildWebHost(string[] args)
        {
            var defaultConfig = new ConfigurationBuilder()
                                .AddCommandLine(args)
                                .AddEnvironmentVariables(prefix: "ASPNETCORE_")
                                .Build();

            var port             = defaultConfig.GetValue("port", 5000);
            var connectionString = defaultConfig.GetValue("ConnectionString", "");

            return(WebHost.CreateDefaultBuilder(args)
                   .ConfigureKestrel(serverOptions =>
            {
                serverOptions.Limits.MaxRequestBodySize = 100 * 1024 * 1024;    // 100Mb
            })
                   .UseUrls($"http://0.0.0.0:{port}")
                   // .UseIISIntegration()
                   .ConfigureAppConfiguration((hostContext, config) =>
            {
                Log.LogEvent("Delete all default configuration providers");
                // delete all default configuration providers
                config.Sources.Clear();
                config.SetBasePath(hostContext.HostingEnvironment.ContentRootPath);

                var filePath = Path.Combine(hostContext.HostingEnvironment.ContentRootPath,
                                            "connection.json");

                if (!File.Exists(filePath))
                {
                    ConnectionStringManager.CreateDefault(filePath);
                }

                if (!string.IsNullOrEmpty(connectionString))
                {
                    ConnectionStringManager.CreateWithConnectionString(filePath, connectionString);
                }

                config.AddJsonFile("connection.json", optional: true, reloadOnChange: true);
                var mainSettings = ConnectionStringManager.Read(filePath);
                _defaultConnectionString = mainSettings?.ConnectionStrings?.DefaultConnection;
                config.AddEfConfiguration(_defaultConnectionString);
                EnabledPlugins = PluginHelper.GetPlugins(_defaultConnectionString);
                DisabledPlugins = PluginHelper.GetDisablePlugins(_defaultConnectionString);

                var contextFactory = new BaseDbContextFactory();
                if (_defaultConnectionString != "...")
                {
                    using var dbContext = contextFactory.CreateDbContext(new[] { _defaultConnectionString });
                    foreach (var plugin in EnabledPlugins)
                    {
                        var pluginEntity = dbContext.EformPlugins
                                           .FirstOrDefault(x => x.PluginId == plugin.PluginId);

                        if (pluginEntity != null && !string.IsNullOrEmpty(pluginEntity.ConnectionString))
                        {
                            plugin.AddPluginConfig(config, pluginEntity.ConnectionString);
                        }
                    }
                }

                config.AddEnvironmentVariables();
            })
                   .UseStartup <Startup>()
                   .Build());
        }