public TableBinding(string parameterName, ITableArgumentBinding argumentBinding, IStorageTableClient client, IBindableTablePath path) { _parameterName = parameterName; _argumentBinding = argumentBinding; _client = client; _accountName = TableClient.GetAccountName(client); _path = path; _converter = CreateConverter(client, path); }
public async Task <IBinding> TryCreateAsync(BindingProviderContext context) { ParameterInfo parameter = context.Parameter; TableAttribute tableAttribute = parameter.GetCustomAttribute <TableAttribute>(inherit: false); if (tableAttribute == null) { return(null); } string tableName = Resolve(tableAttribute.TableName); IStorageAccount account = await _accountProvider.GetStorageAccountAsync(context.CancellationToken); IStorageTableClient client = account.CreateTableClient(); Type parameterType = parameter.ParameterType; bool bindsToEntireTable = tableAttribute.RowKey == null; IBinding binding; if (bindsToEntireTable) { IBindableTablePath path = BindableTablePath.Create(tableName); path.ValidateContractCompatibility(context.BindingDataContract); ITableArgumentBinding argumentBinding = _tableProvider.TryCreate(parameterType); if (argumentBinding == null) { throw new InvalidOperationException("Can't bind Table to type '" + parameterType + "'."); } binding = new TableBinding(parameter.Name, argumentBinding, client, path); } else { string partitionKey = Resolve(tableAttribute.PartitionKey); string rowKey = Resolve(tableAttribute.RowKey); IBindableTableEntityPath path = BindableTableEntityPath.Create(tableName, partitionKey, rowKey); path.ValidateContractCompatibility(context.BindingDataContract); IArgumentBinding <TableEntityContext> argumentBinding = _entityProvider.TryCreate(parameterType); if (argumentBinding == null) { throw new InvalidOperationException("Can't bind Table entity to type '" + parameterType + "'."); } binding = new TableEntityBinding(parameter.Name, argumentBinding, client, path); } return(binding); }
public ITableArgumentBinding TryCreate(Type parameterType) { foreach (ITableArgumentBindingProvider provider in _providers) { ITableArgumentBinding binding = provider.TryCreate(parameterType); if (binding != null) { return(binding); } } return(null); }
public IStorageTableArgumentBinding TryCreate(ParameterInfo parameter) { // see if there are any registered binding extension providers that can // bind to this parameter foreach (IArgumentBindingProvider <ITableArgumentBinding> provider in _bindingExtensionsProviders) { ITableArgumentBinding bindingExtension = provider.TryCreate(parameter); if (bindingExtension != null) { // if an extension is able to bind, wrap the binding return(new TableArgumentBindingExtension(bindingExtension)); } } return(null); }
public TableArgumentBindingExtension(ITableArgumentBinding binding) { _binding = binding; }