/// <inheritdoc /> public void Initialize(ExtensionConfigContext context) { if (context == null) { throw new ArgumentNullException("context"); } INameResolver nameResolver = context.Config.GetService <INameResolver>(); IConverterManager converterManager = context.Config.GetService <IConverterManager>(); BindingFactory factory = new BindingFactory(nameResolver, converterManager); IBindingProvider outputProvider = factory.BindToGenericAsyncCollector <MobileTableAttribute>(BindForOutput, ThrowIfInvalidOutputItemType); IBindingProvider clientProvider = factory.BindToExactType <MobileTableAttribute, IMobileServiceClient>(BindForClient); IBindingProvider queryProvider = factory.BindToGenericItem <MobileTableAttribute>(BindForQueryAsync); queryProvider = factory.AddFilter <MobileTableAttribute>(IsQueryType, queryProvider); IBindingProvider jObjectTableProvider = factory.BindToExactType <MobileTableAttribute, IMobileServiceTable>(BindForTable); IBindingProvider tableProvider = factory.BindToGenericItem <MobileTableAttribute>(BindForTableAsync); 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"); } _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); }
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); }
// Binding rule only allowed on attributes that don't specify the RowKey. private static IBindingProvider AllowMultipleRows(BindingFactory bf, IBindingProvider innerProvider) { return(bf.AddFilter <TableAttribute>((attr, type) => attr.RowKey == null, innerProvider)); }