public Task <IBinding?> TryCreateAsync(BindingProviderContext context)
        {
            _ = context ?? throw new ArgumentNullException(nameof(context));

            var attribute = context.Parameter.GetCustomAttributes(inherit: false).OfType <IBindingSourceMetadata>().FirstOrDefault();

            if (!(attribute is null))
            {
                var modelMetadata = _modelMetadataProvider switch
                {
                    ModelMetadataProvider provider => provider.GetMetadataForParameter(context.Parameter),
                    _ => _modelMetadataProvider.GetMetadataForType(context.Parameter.ParameterType)
                };

                var modelBinderFactoryContext = new ModelBinderFactoryContext
                {
                    Metadata    = modelMetadata,
                    BindingInfo = BindingInfo.GetBindingInfo(context.Parameter.GetCustomAttributes())
                };

                var modelBinder = _modelBinderFactory.CreateBinder(modelBinderFactoryContext);

                return(Task.FromResult <IBinding?>(new MvcModelBinding(context.Parameter, modelMetadata, modelBinder, _mvcOptions.ValueProviderFactories)));
            }

            return(Task.FromResult <IBinding?>(null));
        }
    }