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); }
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); }
// 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); }
/// <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) }); }
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); }
/// <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); }