< Summary - AsyncResponse (Release / net8.0+net10.0 / unit+integration)

Information
Class: Microsoft.Extensions.DependencyInjection.AzureServiceBusAsyncResponseServiceCollectionExtensions
Assembly: AsyncResponse.Transports.AzureServiceBus
File(s): /_/src/Transports/AsyncResponse.Transports.AzureServiceBus/ServiceCollectionExtensions.cs
Line coverage
100%
Covered lines: 27
Uncovered lines: 0
Coverable lines: 27
Total lines: 58
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
WithAzureServiceBusTransport(...)100%11100%

File(s)

/_/src/Transports/AsyncResponse.Transports.AzureServiceBus/ServiceCollectionExtensions.cs

#LineLine coverage
 1using AsyncResponse;
 2using AsyncResponse.Transports.AzureServiceBus;
 3using Microsoft.Extensions.DependencyInjection.Extensions;
 4
 5namespace Microsoft.Extensions.DependencyInjection;
 6
 7/// <summary>DI registration for the Azure Service Bus AsyncResponse transport.</summary>
 8public static class AzureServiceBusAsyncResponseServiceCollectionExtensions
 9{
 10    /// <summary>
 11    /// Registers Azure Service Bus as the worker transport and response ingress in one call:
 12    /// <list type="bullet">
 13    /// <item><description>worker jobs are published to <see cref="AzureServiceBusAsyncResponseOptions.WorkerQueue"/>;</
 14    /// <item><description>a hosted subscriber reads that worker queue and executes worker jobs;</description></item>
 15    /// <item><description>a hosted subscriber reads <see cref="AzureServiceBusAsyncResponseOptions.ResponseQueue"/> and
 16    /// </list>
 17    /// Azure Service Bus is a transport, not a recovery store: pair it with a channel
 18    /// (<c>.WithInMemoryChannel()</c> for simple apps, or a durable channel such as
 19    /// <c>.WithRedisChannel()</c>, <c>.WithNatsChannel()</c>, or <c>.WithPostgreSqlChannel()</c> when
 20    /// late responses must survive redeploys).
 21    /// </summary>
 22    public static AsyncResponseRegistrationBuilder WithAzureServiceBusTransport(
 23        this AsyncResponseRegistrationBuilder builder,
 24        Action<AzureServiceBusAsyncResponseOptions> configure)
 25    {
 19826        ArgumentNullException.ThrowIfNull(configure);
 27
 19828        var services = builder.Services;
 19829        services.AddOptions();
 19830        services.Configure(configure);
 31
 19832        services.TryAddSingleton(AzureServiceBusClientResolver.Create);
 39433        services.TryAddSingleton(provider => new AzureServiceBusWorkerTransport(
 39434            provider.GetRequiredService<Microsoft.Extensions.Options.IOptions<AzureServiceBusAsyncResponseOptions>>(),
 39435            provider.GetRequiredService<IAzureServiceBusClient>()));
 19836        services.Replace(ServiceDescriptor.Singleton<IWorkerTransport>(provider =>
 39437            provider.GetRequiredService<AzureServiceBusWorkerTransport>()));
 19838        services.Replace(ServiceDescriptor.Singleton<IAsyncResponseReplyTargetProvider, AzureServiceBusReplyTargetProvid
 19839        services.AddSingleton(provider =>
 19840        {
 19841            // Resolved ack modes declared to the Core startup validator, which vetoes early ACK on
 19842            // the worker queue durable-flow wake-ups ride (see AsyncResponseStartupValidator).
 19843            var options = provider.GetRequiredService<Microsoft.Extensions.Options.IOptions<AzureServiceBusAsyncResponse
 19844            return new AsyncResponseTransportMarker(AzureServiceBusAsyncResponseOptions.TransportName)
 19845            {
 19846                WorkerSubscriberUsesEarlyAck = options.WorkerSubscriber.AckMode == AzureServiceBusAckMode.AckAfterEnqueu
 19847                WorkerAckModePath = $"{nameof(AzureServiceBusAsyncResponseOptions)}.{nameof(options.WorkerSubscriber)}.{
 19848                ResponseSubscriberUsesEarlyAck = options.ResponseSubscriber.AckMode == AzureServiceBusAckMode.AckAfterEn
 19849                ResponseAckModePath = $"{nameof(AzureServiceBusAsyncResponseOptions)}.{nameof(options.ResponseSubscriber
 19850            };
 19851        });
 52
 19853        services.AddHostedService<AzureServiceBusWorkerSubscriber>();
 19854        services.AddHostedService<AzureServiceBusResponseIngressSubscriber>();
 55
 19856        return builder;
 57    }
 58}