private IBindingProvider CreateBinding() { IBindingProvider[] bindings = _binders.Select(x => x.Binder).ToArray(); var all = new GenericCompositeBindingProvider <TAttribute>(_validator, _configuration, this._nameResolver, bindings); return(all); }
// Helper to allocate a binding provider for [Queue]. // private instance method since it's refering to lambdas that close over the instance fields. private IBindingProvider New( INameResolver nameResolver, IConverterManager converterManager) { // IStorageQueueMessage is the core testing interface converterManager.AddConverter <byte[], IStorageQueueMessage, QueueAttribute>(ConvertByteArrayToCloudQueueMessage); converterManager.AddConverter <IStorageQueueMessage, byte[]>(ConvertCloudQueueMessageToByteArray); converterManager.AddConverter <object, JObject, QueueAttribute>(SerializeToJobject); converterManager.AddConverter <string, IStorageQueueMessage, QueueAttribute>(ConvertStringToCloudQueueMessage); converterManager.AddConverter <IStorageQueueMessage, string>(ConvertCloudQueueMessageToString); converterManager.AddConverter <CloudQueueMessage, IStorageQueueMessage>(ConvertToStorageQueueMessage); var bindingFactory = new BindingFactory(nameResolver, converterManager); var bindAsyncCollector = bindingFactory.BindToCollector <QueueAttribute, IStorageQueueMessage>(BuildFromQueueAttribute) .SetPostResolveHook <QueueAttribute>(ToWriteParameterDescriptorForCollector, CollectAttributeInfo); var bindClient = bindingFactory.BindToInput <QueueAttribute, IStorageQueue>(typeof(QueueBuilder)) .SetPostResolveHook <QueueAttribute>(ToReadWriteParameterDescriptorForCollector, CollectAttributeInfo); var bindSdkClient = bindingFactory.BindToInput <QueueAttribute, CloudQueue>(typeof(QueueBuilder)) .SetPostResolveHook <QueueAttribute>(ToReadWriteParameterDescriptorForCollector, CollectAttributeInfo); var bindingProvider = new GenericCompositeBindingProvider <QueueAttribute>( ValidateQueueAttribute, nameResolver, bindClient, bindSdkClient, bindAsyncCollector); return(bindingProvider); }
public static void RegisterBindingRules <TAttribute>(this IExtensionRegistry registry, params IBindingProvider[] bindingProviders) where TAttribute : Attribute { if (registry == null) { throw new ArgumentNullException("registry"); } var all = new GenericCompositeBindingProvider <TAttribute>(bindingProviders); registry.RegisterExtension <IBindingProvider>(all); }
public static void RegisterBindingRules <TAttribute>( this IExtensionRegistry registry, Action <TAttribute, Type> validator, IConfiguration configuration, INameResolver nameResolver, params IBindingProvider[] bindingProviders) where TAttribute : Attribute { if (registry == null) { throw new ArgumentNullException("registry"); } var all = new GenericCompositeBindingProvider <TAttribute>(validator, configuration, nameResolver, bindingProviders); registry.RegisterExtension <IBindingProvider>(all); }
public static IBindingProvider Build(INameResolver nameResolver, IConverterManager converterManager, IStorageAccountProvider accountProvider, IExtensionRegistry extensions) { var original = new TableAttributeBindingProvider(nameResolver, accountProvider, extensions); converterManager.AddConverter <JObject, ITableEntity, TableAttribute>(original.JObjectToTableEntityConverterFunc); converterManager.AddConverter <object, ITableEntity, TableAttribute>(typeof(ObjectToITableEntityConverter <>)); // IStorageTable --> IQueryable<ITableEntity> converterManager.AddConverter <IStorageTable, IQueryable <OpenType>, TableAttribute>(typeof(TableToIQueryableConverter <>)); var bindingFactory = new BindingFactory(nameResolver, converterManager); // Includes converter manager, which provides access to IQueryable<ITableEntity> var bindToExactCloudTable = bindingFactory.BindToInput <TableAttribute, CloudTable>(typeof(JObjectBuilder)) .SetPostResolveHook <TableAttribute>(original.ToParameterDescriptorForCollector, original.CollectAttributeInfo); var bindToExactTestCloudTable = bindingFactory.BindToInput <TableAttribute, IStorageTable>(typeof(JObjectBuilder)) .SetPostResolveHook <TableAttribute>(original.ToParameterDescriptorForCollector, original.CollectAttributeInfo); var bindAsyncCollector = bindingFactory.BindToCollector <TableAttribute, ITableEntity>(original.BuildFromTableAttribute) .SetPostResolveHook <TableAttribute>(null, original.CollectAttributeInfo); var bindToJobject = bindingFactory.BindToInput <TableAttribute, JObject>(typeof(JObjectBuilder)) .SetPostResolveHook <TableAttribute>(null, original.CollectAttributeInfo); var bindToJArray = bindingFactory.BindToInput <TableAttribute, JArray>(typeof(JObjectBuilder)) .SetPostResolveHook <TableAttribute>(null, original.CollectAttributeInfo); var bindingProvider = new GenericCompositeBindingProvider <TableAttribute>( ValidateAttribute, nameResolver, new IBindingProvider[] { bindAsyncCollector, AllowMultipleRows(bindingFactory, bindToExactCloudTable), AllowMultipleRows(bindingFactory, bindToExactTestCloudTable), bindToJArray, bindToJobject, original }); return(bindingProvider); }
public static IBindingProvider Build(INameResolver nameResolver, IConverterManager converterManager, IStorageAccountProvider accountProvider, IExtensionRegistry extensions) { var original = new TableAttributeBindingProvider(nameResolver, accountProvider, extensions); converterManager.AddConverter <JObject, ITableEntity, TableAttribute>(original.JObjectToTableEntityConverterFunc); var bindingFactory = new BindingFactory(nameResolver, converterManager); var bindAsyncCollector = bindingFactory.BindToAsyncCollector <TableAttribute, ITableEntity>(original.BuildFromTableAttribute, null, original.CollectAttributeInfo); var bindToJobject = bindingFactory.BindToExactAsyncType <TableAttribute, JObject>(original.BuildJObject, null, original.CollectAttributeInfo); var bindToJArray = bindingFactory.BindToExactAsyncType <TableAttribute, JArray>(original.BuildJArray, null, original.CollectAttributeInfo); // Filter to just support JObject, and use legacy bindings for everything else. // Once we have ITableEntity converters for pocos, we can remove the filter. // https://github.com/Azure/azure-webjobs-sdk/issues/887 bindAsyncCollector = bindingFactory.AddFilter <TableAttribute>( (attr, type) => (type == typeof(IAsyncCollector <JObject>) || type == typeof(ICollector <JObject>)), bindAsyncCollector); var bindingProvider = new GenericCompositeBindingProvider <TableAttribute>( new IBindingProvider[] { bindToJArray, bindToJobject, bindAsyncCollector, original }); return(bindingProvider); }
private IBindingProvider CreateBinding() { var all = new GenericCompositeBindingProvider <TAttribute>(_validator, this._parent.NameResolver, _binders.ToArray()); return(all); }