/// <summary>
 /// This method provides a factory for instantiating a MongoDB connection from Docker Secrets or Environment Variables
 /// </summary>
 /// <typeparam name="TConfiguration"></typeparam>
 /// <returns></returns>
 public static ClientBuilder FromConfiguration <TConfiguration>() where TConfiguration : Configuration, new()
 {
     // Check the configuration type for Docker Secrets
     if (typeof(TConfiguration) == typeof(IDockerConfiguration))
     {
         return(new ClientBuilder(
                    Core.Convert.MapWithValueGetter <TConfiguration, DockerSecretNameAttribute>(
                        (attribute, type, value) => Docker.Get(attribute.Name))));
     }
     // Check the configuration type for the Environment
     if (typeof(TConfiguration) == typeof(IEnvironmentConfiguration))
     {
         return(new ClientBuilder(
                    Core.Convert.MapWithValueGetter <TConfiguration, EnvironmentVariableAttribute>(
                        ((attribute, type, value) => Environment.Get(attribute.Name)))));
     }
     // If we're here, just return a new instance
     return(new ClientBuilder());
 }
        /// <summary>
        /// This method instantiates the connection from the environment
        /// </summary>
        public DockerConnection()
        {
            // Localize the docker settings construct
            DockerConnectionSettings connectionSettings =
                Convert.MapWithValueGetter <DockerConnectionSettings, DockerSecretNameAttribute>((attribute, type, currentValue) =>
                                                                                                 Docker.Get(attribute.Name));

            // Setup the instance
            WithAllowAdminFlag(connectionSettings.AllowAdmin)
            .WithDatabaseAtIndex(connectionSettings.Database)
            .WithHost(connectionSettings.Host)
            .WithPassword(connectionSettings.Password)
            .WithPort(connectionSettings.Port)
            .WithSerializerSettings()
            .WithSocketFlag(connectionSettings.IsUnixSocket)
            .WithSslFlag(connectionSettings.UseSsl)
            .WithUsername(connectionSettings.Username);
        }