/// <summary>
        /// Initializes a new instance of the MongoGridFS class.
        /// </summary>
        /// <param name="database">The database containing the GridFS collections.</param>
        /// <param name="settings">The GridFS settings.</param>
        public MongoGridFS(MongoDatabase database, MongoGridFSSettings settings)
        {
            settings = settings.Clone();
            settings.ApplyDefaultValues(database.Settings);
            settings.Freeze();

            _database = database;
            _settings = settings;
            _chunks = database.GetCollection(settings.Root + ".chunks");
            _files = database.GetCollection(settings.Root + ".files");
        }
        /// <summary>
        /// Initializes a new instance of the MongoGridFS class.
        /// </summary>
        /// <param name="database">The database containing the GridFS collections.</param>
        /// <param name="settings">The GridFS settings.</param>
        public MongoGridFS(MongoDatabase database, MongoGridFSSettings settings)
        {
            settings = settings.Clone();
            settings.ApplyDefaultValues(database.Settings);
            settings.Freeze();

            _database = database;
            _settings = settings;
            _chunks   = database.GetCollection(settings.Root + ".chunks");
            _files    = database.GetCollection(settings.Root + ".files");
        }
        // private static methods
        private static MongoGridFSSettings ApplyDefaultValues(MongoGridFSSettings settings, MongoDatabase database)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }
            if (database == null)
            {
                throw new ArgumentNullException("database");
            }

            settings = settings.Clone();
            settings.ApplyDefaultValues(database.Settings);
            return(settings);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MongoGridFS"/> class.
        /// </summary>
        /// <param name="server">The server.</param>
        /// <param name="databaseName">The name of the database.</param>
        /// <param name="settings">The settings.</param>
        public MongoGridFS(MongoServer server, string databaseName, MongoGridFSSettings settings)
        {
            if (server == null)
            {
                throw new ArgumentNullException("server");
            }
            if (databaseName == null)
            {
                throw new ArgumentNullException("databaseName");
            }
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            settings = settings.Clone();
            settings.ApplyDefaultValues(server.Settings);
            settings.Freeze();

            _server       = server;
            _databaseName = databaseName;
            _settings     = settings;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MongoGridFS"/> class.
        /// </summary>
        /// <param name="server">The server.</param>
        /// <param name="databaseName">The name of the database.</param>
        /// <param name="settings">The settings.</param>
        public MongoGridFS(MongoServer server, string databaseName, MongoGridFSSettings settings)
        {
            if (server == null)
            {
                throw new ArgumentNullException("server");
            }
            if (databaseName == null)
            {
                throw new ArgumentNullException("databaseName");
            }
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            settings = settings.Clone();
            settings.ApplyDefaultValues(server.Settings);
            settings.Freeze();

            _server = server;
            _databaseName = databaseName;
            _settings = settings;
        }
        // private static methods
        private static MongoGridFSSettings ApplyDefaultValues(MongoGridFSSettings settings, MongoDatabase database)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }
            if (database == null)
            {
                throw new ArgumentNullException("database");
            }

            settings = settings.Clone();
            settings.ApplyDefaultValues(database.Settings);
            return settings;
        }