in src/WebJobs.Extensions/Extensions/Files/Bindings/FileAttributeBindingProvider.cs [40:73]
public Task<IBinding> TryCreateAsync(BindingProviderContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
// Determine whether we should bind to the current parameter
ParameterInfo parameter = context.Parameter;
FileAttribute attribute = parameter.GetCustomAttribute<FileAttribute>(inherit: false);
if (attribute == null)
{
return Task.FromResult<IBinding>(null);
}
// first, verify the file path binding (if it contains binding parameters)
string path = attribute.Path;
if (_nameResolver != null)
{
path = _nameResolver.ResolveWholeString(path);
}
BindingTemplate bindingTemplate = BindingTemplate.FromString(path);
bindingTemplate.ValidateContractCompatibility(context.BindingDataContract);
IEnumerable<Type> types = StreamValueBinder.GetSupportedTypes(attribute.Access)
.Union(new Type[] { typeof(FileStream), typeof(FileInfo) });
if (!ValueBinder.MatchParameterType(context.Parameter, types))
{
throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture,
"Can't bind FileAttribute to type '{0}'.", parameter.ParameterType));
}
return Task.FromResult<IBinding>(new FileBinding(_options, parameter, bindingTemplate));
}