src/Microsoft.Azure.WebJobs.Host/Bindings/Data/StructDataBindingProvider.cs (33 lines of code) (raw):
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
using System;
using System.Reflection;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Host.Converters;
namespace Microsoft.Azure.WebJobs.Host.Bindings.Data
{
/// <summary>
/// Handles value types (structs) as well as nullable types.
/// </summary>
internal class StructDataBindingProvider<TBindingData> : IBindingProvider
{
private static readonly IDataArgumentBindingProvider<TBindingData> InnerProvider =
new CompositeArgumentBindingProvider<TBindingData>(
new ConverterArgumentBindingProvider<TBindingData, TBindingData>(new IdentityConverter<TBindingData>()),
new TToStringArgumentBindingProvider<TBindingData>());
public Task<IBinding> TryCreateAsync(BindingProviderContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
ParameterInfo parameter = context.Parameter;
IArgumentBinding<TBindingData> argumentBinding = InnerProvider.TryCreate(parameter);
string parameterName = parameter.Name;
Type parameterType = parameter.ParameterType;
if (argumentBinding == null)
{
throw new InvalidOperationException(
"Can't bind parameter '" + parameterName + "' to type '" + parameterType + "'.");
}
IBinding binding = new StructDataBinding<TBindingData>(parameterName, argumentBinding);
return Task.FromResult(binding);
}
}
}