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

Information
Class: Microsoft.Extensions.DependencyInjection.SqlServerAsyncResponseChannelServiceCollectionExtensions
Assembly: AsyncResponse.Channels.SqlServer
File(s): /home/runner/work/AsyncResponse/AsyncResponse/src/Channels/AsyncResponse.Channels.SqlServer/ServiceCollectionExtensions.cs
Line coverage
100%
Covered lines: 22
Uncovered lines: 0
Coverable lines: 22
Total lines: 52
Line coverage: 100%
Branch coverage
100%
Covered branches: 20
Total branches: 20
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
WithSqlServerChannel(...)100%2020100%

File(s)

/home/runner/work/AsyncResponse/AsyncResponse/src/Channels/AsyncResponse.Channels.SqlServer/ServiceCollectionExtensions.cs

#LineLine coverage
 1using AsyncResponse;
 2using AsyncResponse.Channels.SqlServer;
 3using Microsoft.Extensions.DependencyInjection.Extensions;
 4
 5namespace Microsoft.Extensions.DependencyInjection;
 6
 7/// <summary>DI registration for the Microsoft SQL Server-backed AsyncResponse channel package.</summary>
 8public static class SqlServerAsyncResponseChannelServiceCollectionExtensions
 9{
 10    /// <summary>
 11    /// Registers SQL Server as the response channel — behind
 12    /// <see cref="IAsyncResponsePublisher"/>, <see cref="IAsyncResponseSubscriber"/>, and
 13    /// <see cref="IRecoverableAsyncResponseSubscriber"/> — together with the durable SQL Server
 14    /// recovery-state store. Active waiters are woken by an adaptive polling sweep (tight while
 15    /// waiters are subscribed, backed off while idle) because SQL Server has no
 16    /// <c>LISTEN/NOTIFY</c>; same-process deliveries bypass the sweep entirely. Configure
 17    /// <see cref="SqlServerAsyncResponseChannelOptions.ConnectionString"/> with the application's
 18    /// SQL Server database.
 19    /// </summary>
 20    public static AsyncResponseRegistrationBuilder WithSqlServerChannel(
 21        this AsyncResponseRegistrationBuilder builder,
 22        Action<SqlServerAsyncResponseChannelOptions>? configure = null)
 23    {
 324        var services = builder.Services;
 325        services.AddOptions();
 326        if (configure is not null)
 327            services.Configure(configure);
 28
 329        services.TryAddSingleton<SqlServerChannelSql>();
 30
 331        services.TryAddSingleton<SqlServerRecoveryStateStore>();
 332        services.Replace(ServiceDescriptor.Singleton<IRecoveryStateStore>(provider => provider.GetRequiredService<SqlSer
 333        services.Replace(ServiceDescriptor.Singleton<IRecoveryStateScanner>(provider => provider.GetRequiredService<SqlS
 34
 335        services.TryAddSingleton<SqlServerAsyncResponseChannel>();
 336        services.Replace(ServiceDescriptor.Singleton<IAsyncResponsePublisher>(provider => provider.GetRequiredService<Sq
 337        services.Replace(ServiceDescriptor.Singleton<IRawAsyncResponsePublisher>(provider => provider.GetRequiredService
 338        services.Replace(ServiceDescriptor.Singleton<IAsyncResponseSubscriber>(provider => provider.GetRequiredService<S
 339        services.Replace(ServiceDescriptor.Singleton<IRecoverableAsyncResponseSubscriber>(provider => provider.GetRequir
 340        services.Replace(ServiceDescriptor.Singleton<IActiveSubscriberProbe>(provider => provider.GetRequiredService<Sql
 41
 342        services.Replace(ServiceDescriptor.Singleton<IRecoverableAsyncResponseBuilder>(provider => new RecoverableAsyncR
 343            provider.GetRequiredService<IRecoverableAsyncResponseSubscriber>(),
 344            provider.GetService<IWorkerTransport>(),
 345            provider.GetService<IAsyncResponseReplyTargetProvider>(),
 346            provider.GetRequiredService<AsyncResponseContextPropagation>())));
 347        services.Replace(ServiceDescriptor.Singleton<IAsyncResponseBuilder>(provider => provider.GetRequiredService<IRec
 48
 349        services.AddSingleton(new AsyncResponseChannelMarker(SqlServerAsyncResponseChannelOptions.ChannelName));
 350        return builder;
 51    }
 52}