public Task <IBinding> TryCreateAsync(BindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            ParameterInfo parameter = context.Parameter;

            TAttribute attributeSource = parameter.GetCustomAttribute <TAttribute>(inherit: false);

            if (attributeSource == null)
            {
                return(Task.FromResult <IBinding>(null));
            }

            if (parameter.ParameterType != typeof(TUserType))
            {
                return(Task.FromResult <IBinding>(null));
            }

            Func <TAttribute, Task <TAttribute> > hookWrapper = null;

            if (_postResolveHook != null)
            {
                hookWrapper = (attrResolved) => _postResolveHook(attrResolved, parameter, _nameResolver);
            }

            var cloner = new AttributeCloner <TAttribute>(attributeSource, context.BindingDataContract, _nameResolver, hookWrapper);
            ParameterDescriptor param;

            if (_buildParameterDescriptor != null)
            {
                param = _buildParameterDescriptor(attributeSource, parameter, _nameResolver);
            }
            else
            {
                param = new ParameterDescriptor
                {
                    Name         = parameter.Name,
                    DisplayHints = new ParameterDisplayHints
                    {
                        Description = "output"
                    }
                };
            }

            var binding = new ExactBinding(cloner, param, _buildFromAttr);

            return(Task.FromResult <IBinding>(binding));
        }
Esempio n. 2
0
        public Task <IBinding> TryCreateAsync(BindingProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            var parameter = context.Parameter;
            var typeUser  = parameter.ParameterType;

            if (typeUser.IsByRef)
            {
                return(Task.FromResult <IBinding>(null));
            }

            var binding = ExactBinding.TryBuild(this, context);

            return(Task.FromResult <IBinding>(binding));
        }