in extension/WebJobs.Extensions.RabbitMQ/Trigger/RabbitMQTriggerAttributeBindingProvider.cs [15:55]
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;
}
}