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)); } }