Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo/Trigger/CosmosDBMongoTriggerBindingProvider.cs (47 lines of code) (raw):
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
using Microsoft.Azure.WebJobs.Host.Triggers;
using Microsoft.Azure.WebJobs.Logging;
using Microsoft.Extensions.Logging;
using System;
using System.Reflection;
using System.Threading.Tasks;
namespace Microsoft.Azure.WebJobs.Extensions.AzureCosmosDb.Mongo
{
public class CosmosDBMongoTriggerBindingProvider : ITriggerBindingProvider
{
private readonly CosmosDBMongoConfigProvider _configProvider;
private readonly INameResolver _nameResolver;
private readonly ILogger _logger;
public CosmosDBMongoTriggerBindingProvider(INameResolver nameResolver, CosmosDBMongoConfigProvider configProvider, ILoggerFactory loggerFactory)
{
this._nameResolver = nameResolver;
this._configProvider = configProvider;
this._logger = loggerFactory.CreateLogger(LogCategories.CreateTriggerCategory(CosmosDBMongoConstant.AzureFunctionTelemetryCategory));
}
public Task<ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context)
{
if (context == null)
throw new ArgumentNullException("context");
var attribute = context.Parameter.GetCustomAttribute<CosmosDBMongoTriggerAttribute>(inherit: false);
if (attribute == null)
{
return Task.FromResult<ITriggerBinding>(null);
}
string connectionString = _configProvider.ResolveConnectionString(attribute.ConnectionStringSetting);
string functionId = context.Parameter.Member.Name;
var reference = new MongoCollectionReference(
_configProvider.GetService(connectionString),
ResolveAttributeValue(attribute.DatabaseName),
ResolveAttributeValue(attribute.CollectionName));
reference.functionId = functionId;
return
Task.FromResult<ITriggerBinding>(new CosmosDBMongoTriggerBinding(context.Parameter,
reference,
this._logger));
}
private string ResolveAttributeValue(string value)
{
return this._nameResolver.Resolve(value) ?? value;
}
}
}