private IBindingProvider CreateBinding()
        {
            IBindingProvider[] bindings = _binders.Select(x => x.Binder).ToArray();
            var all = new GenericCompositeBindingProvider <TAttribute>(_validator, _configuration, this._nameResolver, bindings);

            return(all);
        }
Пример #2
0
        // 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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        private IBindingProvider CreateBinding()
        {
            var all = new GenericCompositeBindingProvider <TAttribute>(_validator, this._parent.NameResolver, _binders.ToArray());

            return(all);
        }