コード例 #1
0
 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);
 }
コード例 #2
0
 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);
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        public ITableArgumentBinding TryCreate(Type parameterType)
        {
            foreach (ITableArgumentBindingProvider provider in _providers)
            {
                ITableArgumentBinding binding = provider.TryCreate(parameterType);

                if (binding != null)
                {
                    return(binding);
                }
            }

            return(null);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 public TableArgumentBindingExtension(ITableArgumentBinding binding)
 {
     _binding = binding;
 }
 public TableArgumentBindingExtension(ITableArgumentBinding binding)
 {
     _binding = binding;
 }