extension/WebJobs.Extensions.RabbitMQ/Trigger/RabbitMQTriggerAttributeBindingProvider.cs (44 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 System; using System.Reflection; using System.Threading.Tasks; using Microsoft.Azure.WebJobs.Host; using Microsoft.Azure.WebJobs.Host.Triggers; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace Microsoft.Azure.WebJobs.Extensions.RabbitMQ; internal class RabbitMQTriggerAttributeBindingProvider( INameResolver nameResolver, RabbitMQExtensionConfigProvider provider, ILogger logger, IOptions<RabbitMQOptions> options, IConfiguration configuration, IDrainModeManager drainModeManager) : ITriggerBindingProvider { private readonly INameResolver nameResolver = nameResolver ?? throw new ArgumentNullException(nameof(nameResolver)); private readonly RabbitMQExtensionConfigProvider provider = provider ?? throw new ArgumentNullException(nameof(provider)); private readonly ILogger logger = logger ?? throw new ArgumentNullException(nameof(logger)); private readonly IOptions<RabbitMQOptions> options = options; private readonly IConfiguration configuration = configuration; private readonly IDrainModeManager drainModeManager = drainModeManager; public Task<ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context) { _ = context ?? throw new ArgumentNullException(nameof(context)); ParameterInfo parameter = context.Parameter; RabbitMQTriggerAttribute attribute = parameter.GetCustomAttribute<RabbitMQTriggerAttribute>(inherit: false); if (attribute == null) { return Task.FromResult<ITriggerBinding>(null); } string connectionString = Utility.ResolveConnectionString(attribute.ConnectionStringSetting, this.options.Value.ConnectionString, this.configuration); string queueName = this.Resolve(attribute.QueueName) ?? throw new InvalidOperationException("RabbitMQ queue name is missing"); bool disableCertificateValidation = attribute.DisableCertificateValidation || this.options.Value.DisableCertificateValidation; IRabbitMQService service = this.provider.GetService(connectionString, queueName, disableCertificateValidation); return Task.FromResult<ITriggerBinding>(new RabbitMQTriggerBinding(service, queueName, this.logger, parameter.ParameterType, this.options.Value.PrefetchCount, this.drainModeManager)); } private string Resolve(string name) { return this.nameResolver.ResolveWholeString(name) ?? name; } }