/// <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);
        }
示例#2
0
        /// <summary>
        /// Add a general binder.
        /// </summary>
        /// <param name="binder"></param>
        /// <returns></returns>
        public void Bind(IBindingProvider binder)
        {
            if (this._hook != null)
            {
                var fluidBinder = (FluentBindingProvider <TAttribute>)binder;
                fluidBinder.BuildParameterDescriptor = _hook;
                _hook = null;
            }

            // Apply filters
            if (this._filters.Count > 0)
            {
                var filters = this._filters.ToArray(); // produce copy
                Func <TAttribute, Type, bool> predicate = (attribute, type) =>
                {
                    foreach (var filter in filters)
                    {
                        if (!filter(attribute))
                        {
                            return(false);
                        }
                    }
                    return(true);
                };
                binder = new FilteringBindingProvider <TAttribute>(
                    predicate,
                    this._parent.NameResolver,
                    binder,
                    this._filterDescription.ToString());

                this._filterDescription.Clear();
                this._filters.Clear();
            }

            _binders.Add(binder);
        }