/// <summary>
        /// Add a general binder.
        /// </summary>
        /// <param name="binder"></param>
        /// <returns></returns>
        public FluentBinder Bind(IBindingProvider binder)
        {
            if (this._hook != null)
            {
                var fluidBinder = (FluentBindingProvider <TAttribute>)binder;
                fluidBinder.BuildParameterDescriptor = _hook;
                _hook = null;
            }

            // Apply filters
            if (this._filterDescription.Count > 0)
            {
                binder = new FilteringBindingProvider <TAttribute>(
                    _configuration,
                    this._nameResolver,
                    binder,
                    FilterNode.And(this._filterDescription));

                this._filterDescription.Clear();
            }

            var opts = new FluentBinder(_configuration, _nameResolver, binder);

            _binders.Add(opts);
            return(opts);
        }