/// <summary>
        /// Opens the component.
        /// </summary>
        /// <param name="correlationId">(optional) transaction id to trace execution through call chain.</param>
        public async virtual Task OpenAsync(string correlationId)
        {
            if (IsOpen())
            {
                return;
            }

            if (_connection == null)
            {
                _connection      = CreateLocalConnection();
                _localConnection = true;
            }

            if (_localConnection)
            {
                await _connection.OpenAsync(correlationId);
            }

            if (_connection.IsOpen() == false)
            {
                throw new InvalidStateException(correlationId, "CONNECTION_NOT_OPENED", "Database connection is not opened");
            }

            _database   = _connection.GetDatabase();
            _collection = _database.GetCollection <T>(_collectionName);
            _opened     = true;
        }
        private MongoDbConnection CreateLocalConnection()
        {
            var connection = new MongoDbConnection();

            if (_config != null)
            {
                connection.Configure(_config);
            }

            if (_references != null)
            {
                connection.SetReferences(_references);
            }

            return(connection);
        }
        /// <summary>
        /// Sets references to dependent components.
        /// </summary>
        /// <param name="references">references to locate the component dependencies.</param>
        public virtual void SetReferences(IReferences references)
        {
            _references = references;

            _logger.SetReferences(references);
            _dependencyResolver.SetReferences(references);

            // Get connection
            _connection      = _dependencyResolver.GetOneOptional("connection") as MongoDbConnection;
            _localConnection = _connection == null;

            // Or create a local one
            if (_connection == null)
            {
                _connection = CreateLocalConnection();
            }
        }
        public MongoDbConnectionTest()
        {
            Db = new MongoDbConnection();

            mongoUri      = Environment.GetEnvironmentVariable("MONGO_URI");
            mongoHost     = Environment.GetEnvironmentVariable("MONGO_HOST") ?? "localhost";
            mongoPort     = Environment.GetEnvironmentVariable("MONGO_PORT") ?? "27017";
            mongoDatabase = Environment.GetEnvironmentVariable("MONGO_DB") ?? "test";

            if (mongoUri == null && mongoHost == null)
            {
                return;
            }

            if (Db == null)
            {
                return;
            }
        }
 /// <summary>
 /// Unsets (clears) previously set references to dependent components.
 /// </summary>
 public virtual void UnsetReferences()
 {
     _connection = null;
 }