private void InitializeDatabase()
        {
            var providerName     = ConfigurationManager.AppSettings["Database.Provider"];
            var connectionString = ConfigurationManager.AppSettings["Database.ConnectionString"];
            var owner            = ConfigurationManager.AppSettings["Database.Owner"];

            IDatabaseProvider databaseProvider = new PostgreDatabaseProvider();

            this.For <IDatabaseProvider>().AddInstances(x =>
            {
                var providers = Reflection.GetInstancesOfImplementingTypes <IDatabaseProvider>(this.GetAssembly());

                foreach (var provider in providers)
                {
                    if (provider.Name == providerName)
                    {
                        databaseProvider = provider;
                    }

                    x.Type(provider.GetType()).Named(provider.Name);
                }
            });

            this.For <IDatabaseProvider>().Use(databaseProvider);

            Database.Initialize(databaseProvider, connectionString, owner);
        }
        public async Task <bool> InstantiateDatabaseContainer(PostgreDatabaseProvider database, CancellationToken cancellationToken)
        {
            logger.Information("---- Starting Deploy Database Container ----");

            await DownloadImage("postgres", "latest", cancellationToken);

            var volumes = new Dictionary <string, EmptyStruct>();

            volumes.Add($"{database.Storage}:/var/lib/postgresql/data", new EmptyStruct());

            var ports = new Dictionary <string, EmptyStruct>();

            ports.Add("5432/tcp", new EmptyStruct());

            var createParameters = new CreateContainerParameters()
            {
                Image    = "postgres:latest",
                Name     = DbContainerName,
                Hostname = DbContainerName,
                Env      = new List <string>()
                {
                    $"POSTGRES_PASSWORD={database.Password}", $"POSTGRES_USER={database.Username}", $"POSTGRES_DB={database.DbName}"
                },
                Volumes      = volumes,
                ExposedPorts = ports,
                HostConfig   = new HostConfig()
                {
                    NetworkMode   = NetworkName,
                    RestartPolicy = new RestartPolicy()
                    {
                        Name = RestartPolicyKind.Always
                    },
                    PortBindings = new Dictionary <string, IList <PortBinding> >
                    {
                        {
                            $"5432/tcp",
                            new List <PortBinding>
                            {
                                new PortBinding
                                {
                                    HostPort = $"5432"
                                }
                            }
                        }
                    }
                }
            };

            return(await DeployAndStartAsync(DbContainerName, createParameters, cancellationToken));
        }
        public async Task <bool> InstantiateDatabaseContainer(PostgreDatabaseProvider database, CancellationToken cancellationToken)
        {
            Console.WriteLine("---- Starting Deploy Database Container ----");

            await DownloadImage("postgres", "latest", cancellationToken);

            var volumes = new Dictionary <string, EmptyStruct>();

            volumes.Add($"{database.Storage}:/var/lib/postgresql/data", new EmptyStruct());

            var createParameters = new CreateContainerParameters()
            {
                Image = "postgres:latest",
                Name  = DbContainerName,
                Env   = new List <string>()
                {
                    $"POSTGRES_PASSWORD={database.Password}"
                },
                Volumes = volumes
            };

            return(await DeployAndStartAsync(DbContainerName, createParameters, cancellationToken));
        }