Пример #1
0
        void IExtensionConfigProvider.Initialize(ExtensionConfigContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            _defaultStorageString = context.Config.StorageConnectionString;

            // get the services we need to construct our binding providers
            INameResolver      nameResolver = context.Config.NameResolver;
            IExtensionRegistry extensions   = context.Config.GetService <IExtensionRegistry>();

            IConverterManager cm = context.Config.GetService <IConverterManager>();

            cm.AddConverter <string, EventData>(ConvertString2EventData);
            cm.AddConverter <EventData, string>(ConvertEventData2String);
            cm.AddConverter <byte[], EventData>(ConvertBytes2EventData); // direct, handles non-string representations
            cm.AddConverter <EventData, byte[]>(ConvertEventData2Bytes); // direct, handles non-string representations

            var bf = new BindingFactory(nameResolver, cm);

            // register our trigger binding provider
            var triggerBindingProvider = new EventHubTriggerAttributeBindingProvider(nameResolver, cm, this);

            extensions.RegisterExtension <ITriggerBindingProvider>(triggerBindingProvider);

            // register our binding provider
            var ruleOutput = bf.BindToCollector <EventHubAttribute, EventData>(BuildFromAttribute);

            extensions.RegisterBindingRules <EventHubAttribute>(ruleOutput);
        }
        /// <inheritdoc />
        public void Initialize(ExtensionConfigContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            INameResolver nameResolver = context.Config.NameResolver;

            _defaultApiKey = nameResolver.Resolve(AzureWebJobsSendGridApiKeyName);

            IConverterManager converterManager = context.Config.GetService <IConverterManager>();

            converterManager.AddConverter <string, Mail>(SendGridHelpers.CreateMessage);
            converterManager.AddConverter <JObject, Mail>(SendGridHelpers.CreateMessage);

            BindingFactory   factory        = new BindingFactory(nameResolver, converterManager);
            IBindingProvider outputProvider = factory.BindToCollector <SendGridAttribute, Mail>((attr) =>
            {
                string apiKey            = FirstOrDefault(attr.ApiKey, ApiKey, _defaultApiKey);
                ISendGridClient sendGrid = _sendGridClientCache.GetOrAdd(apiKey, a => ClientFactory.Create(a));
                return(new SendGridMailAsyncCollector(this, attr, sendGrid));
            });

            IExtensionRegistry extensions = context.Config.GetService <IExtensionRegistry>();

            extensions.RegisterBindingRules <SendGridAttribute>(ValidateBinding, nameResolver, outputProvider);
        }
Пример #3
0
        void IExtensionConfigProvider.Initialize(ExtensionConfigContext context)
        {
            INameResolver     nameResolver = context.Config.GetService <INameResolver>();
            IConverterManager cm           = context.Config.GetService <IConverterManager>();

            cm.AddConverter <string, FakeQueueData>(x => new FakeQueueData {
                Message = x
            });

            if (this.SetConverters != null)
            {
                this.SetConverters(cm);
            }

            cm.AddConverter <FakeQueueData, string>(msg => msg.Message);
            cm.AddConverter <OtherFakeQueueData, FakeQueueData>(OtherFakeQueueData.ToEvent);

            IExtensionRegistry extensions = context.Config.GetService <IExtensionRegistry>();

            var bf = new BindingFactory(nameResolver, cm);

            // Binds [FakeQueue] --> IAsyncCollector<FakeQueueData>
            var ruleOutput = bf.BindToCollector <FakeQueueAttribute, FakeQueueData>(BuildFromAttr);

            // Binds [FakeQueue] --> FakeQueueClient
            var ruleClient = bf.BindToInput <FakeQueueAttribute, FakeQueueClient>(this);

            extensions.RegisterBindingRules <FakeQueueAttribute>(ruleOutput, ruleClient);

            var triggerBindingProvider = new FakeQueueTriggerBindingProvider(this, cm);

            extensions.RegisterExtension <ITriggerBindingProvider>(triggerBindingProvider);
        }
        public void Initialize(ExtensionConfigContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            INameResolver nameResolver = context.Config.GetService <INameResolver>();

            _defaultAccountSid = nameResolver.Resolve(AzureWebJobsTwilioAccountSidKeyName);
            _defaultAuthToken  = nameResolver.Resolve(AzureWebJobsTwilioAccountAuthTokenName);

            IConverterManager converterManager = context.Config.GetService <IConverterManager>();

            converterManager.AddConverter <JObject, CreateMessageOptions>(CreateMessageOptions);

            BindingFactory   factory        = new BindingFactory(nameResolver, converterManager);
            IBindingProvider outputProvider = factory.BindToCollector <TwilioSmsAttribute, CreateMessageOptions>((attr) =>
            {
                return(new TwilioSmsMessageAsyncCollector(CreateContext(attr)));
            });

            IExtensionRegistry extensions = context.Config.GetService <IExtensionRegistry>();

            extensions.RegisterBindingRules <TwilioSmsAttribute>(ValidateBinding, nameResolver, outputProvider);
        }
Пример #5
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);
        }
        /// <inheritdoc />
        public void Initialize(ExtensionConfigContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            _trace = context.Trace;

            INameResolver     nameResolver     = context.Config.GetService <INameResolver>();
            IConverterManager converterManager = context.Config.GetService <IConverterManager>();

            // Use this if there is no other connection string set.
            _defaultConnectionString = nameResolver.Resolve(AzureWebJobsDocumentDBConnectionStringName);

            BindingFactory factory = new BindingFactory(nameResolver, converterManager);

            IBindingProvider outputProvider = factory.BindToCollector <DocumentDBAttribute, OpenType>(typeof(DocumentDBCollectorBuilder <>), this);

            IBindingProvider clientProvider = factory.BindToInput <DocumentDBAttribute, DocumentClient>(new DocumentDBClientBuilder(this));

            IBindingProvider itemProvider = factory.BindToGenericValueProvider <DocumentDBAttribute>((attr, t) => BindForItemAsync(attr, t));

            IExtensionRegistry extensions = context.Config.GetService <IExtensionRegistry>();

            extensions.RegisterBindingRules <DocumentDBAttribute>(ValidateConnection, nameResolver, outputProvider, clientProvider, itemProvider);
        }
Пример #7
0
        /// <inheritdoc />
        public void Initialize(ExtensionConfigContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            _trace = context.Trace;

            INameResolver nameResolver = context.Config.GetService <INameResolver>();

            IConverterManager converterManager = context.Config.GetService <IConverterManager>();

            // Use this if there is no other connection string set.
            _defaultConnectionString = nameResolver.Resolve(AzureWebJobsCosmosDBConnectionStringName);

            BindingFactory factory = new BindingFactory(nameResolver, converterManager);

            IBindingProvider outputProvider = factory.BindToCollector <CosmosDBAttribute, OpenType>(typeof(CosmosDBCollectorBuilder <>), this);

            IBindingProvider outputProviderJObject = factory.BindToCollector <CosmosDBAttribute, JObject>(typeof(CosmosDBCollectorBuilder <>), this);

            IBindingProvider clientProvider = factory.BindToInput <CosmosDBAttribute, DocumentClient>(new CosmosDBClientBuilder(this));

            IBindingProvider jArrayProvider = factory.BindToInput <CosmosDBAttribute, JArray>(typeof(CosmosDBJArrayBuilder), this);

            IBindingProvider enumerableProvider = factory.BindToInput <CosmosDBAttribute, IEnumerable <OpenType> >(typeof(CosmosDBEnumerableBuilder <>), this);

            enumerableProvider = factory.AddValidator <CosmosDBAttribute>(ValidateInputBinding, enumerableProvider);

            IBindingProvider inputProvider = factory.BindToGenericValueProvider <CosmosDBAttribute>((attr, t) => BindForItemAsync(attr, t));

            inputProvider = factory.AddValidator <CosmosDBAttribute>(ValidateInputBinding, inputProvider);

            context.AddBindingRule <CosmosDBAttribute>()
            .AddConverter <JObject, JObject>(s => s);

            IExtensionRegistry extensions = context.Config.GetService <IExtensionRegistry>();

            extensions.RegisterBindingRules <CosmosDBAttribute>(ValidateConnection, nameResolver, outputProvider, outputProviderJObject, clientProvider, jArrayProvider, enumerableProvider, inputProvider);

            context.Config.RegisterBindingExtensions(new CosmosDBTriggerAttributeBindingProvider(nameResolver, this, LeaseOptions));
        }
 private IBindingProvider[] CreateBindings(BindingFactory factory)
 {
     return(new IBindingProvider[] {
         factory.BindToCollector <FunctionsHttpClientAttribute, OpenType>(typeof(AsyncCollectorConverter <>), this),
         factory.BindToInput <FunctionsHttpClientAttribute, IFunctionsHttpClient>(typeof(FunctionsHttpClientBinder), CreateClient()),
         factory.BindToInput <FunctionsHttpClientAttribute, string>(typeof(FunctionsHttpClientStringBinder), CreateClient()),
         factory.BindToInput <FunctionsHttpClientAttribute, byte[]>(typeof(FunctionsHttpClientByteArrayBinder), CreateClient()),
         factory.BindToInput <FunctionsHttpClientAttribute, Stream>(typeof(FunctionsHttpClientStreamBinder), CreateClient()),
         factory.BindToInput <FunctionsHttpClientAttribute, OpenType>(typeof(FunctionsHttpClientItemValueInputBinder <>), CreateClient()),
         //factory.BindToGenericValueProvider<FunctionsHttpClientAttribute>(BindForItemAsync)
     });
 }
Пример #9
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);
        }
        /// <inheritdoc />
        public void Initialize(ExtensionConfigContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            _nameResolver = context.Config.GetService <INameResolver>();
            IConverterManager converterManager = context.Config.GetService <IConverterManager>();

            // Set defaults, to be used if no other values are found:
            _defaultApiKey = _nameResolver.Resolve(AzureWebJobsMobileAppApiKeyName);

            string uriString = _nameResolver.Resolve(AzureWebJobsMobileAppUriName);

            Uri.TryCreate(uriString, UriKind.Absolute, out _defaultMobileAppUri);

            BindingFactory factory = new BindingFactory(_nameResolver, converterManager);

            IBindingProvider outputProvider = factory.BindToCollector <MobileTableAttribute, OpenType>(typeof(MobileTableCollectorBuilder <>), this);

            IBindingProvider clientProvider = factory.BindToInput <MobileTableAttribute, IMobileServiceClient>(new MobileTableClientBuilder(this));

            IBindingProvider queryProvider = factory.BindToInput <MobileTableAttribute, IMobileServiceTableQuery <OpenType> >(typeof(MobileTableQueryBuilder <>), this);

            queryProvider = factory.AddFilter <MobileTableAttribute>(IsQueryType, queryProvider);

            IBindingProvider jObjectTableProvider = factory.BindToInput <MobileTableAttribute, IMobileServiceTable>(new MobileTableJObjectTableBuilder(this));

            IBindingProvider tableProvider = factory.BindToInput <MobileTableAttribute, IMobileServiceTable <OpenType> >(typeof(MobileTablePocoTableBuilder <>), this);

            tableProvider = factory.AddFilter <MobileTableAttribute>(IsTableType, tableProvider);

            IBindingProvider itemProvider = factory.BindToGenericValueProvider <MobileTableAttribute>(BindForItemAsync);

            itemProvider = factory.AddFilter <MobileTableAttribute>(IsItemType, itemProvider);

            IExtensionRegistry extensions = context.Config.GetService <IExtensionRegistry>();

            extensions.RegisterBindingRules <MobileTableAttribute>(ValidateMobileAppUri, _nameResolver, outputProvider, clientProvider, jObjectTableProvider, queryProvider, tableProvider, itemProvider);
        }
Пример #11
0
        /// <inheritdoc />
        public void Initialize(ExtensionConfigContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            INameResolver      nameResolver = context.Config.NameResolver;
            IExtensionRegistry extensions   = context.Config.GetService <IExtensionRegistry>();

            _defaultConnectionString = nameResolver.Resolve(NotificationHubConnectionStringName);
            _defaultHubName          = nameResolver.Resolve(NotificationHubSettingName);

            var converterManager = context.Config.GetService <IConverterManager>();

            converterManager.AddNotificationHubConverters();

            var bindingFactory = new BindingFactory(nameResolver, converterManager);
            IBindingProvider clientProvider = bindingFactory.BindToInput <NotificationHubAttribute, NotificationHubClient>(new NotificationHubClientBuilder(this));

            var ruleOutput = bindingFactory.BindToCollector <NotificationHubAttribute, Notification>((attribute) => BuildFromAttribute(attribute, context.Trace));

            extensions.RegisterBindingRules <NotificationHubAttribute>(ruleOutput, clientProvider);
        }