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

Information
Class: Microsoft.Extensions.DependencyInjection.PostgreSqlAsyncResponseChannelServiceCollectionExtensions
Assembly: AsyncResponse.Channels.PostgreSQL
File(s): /home/runner/work/AsyncResponse/AsyncResponse/src/Channels/AsyncResponse.Channels.PostgreSQL/ServiceCollectionExtensions.cs
Line coverage
100%
Covered lines: 22
Uncovered lines: 0
Coverable lines: 22
Total lines: 49
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
WithPostgreSqlChannel(...)100%2020100%

File(s)

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

#LineLine coverage
 1using AsyncResponse;
 2using AsyncResponse.Channels.PostgreSQL;
 3using Microsoft.Extensions.DependencyInjection.Extensions;
 4
 5namespace Microsoft.Extensions.DependencyInjection;
 6
 7/// <summary>DI registration for the PostgreSQL-backed AsyncResponse channel package.</summary>
 8public static class PostgreSqlAsyncResponseChannelServiceCollectionExtensions
 9{
 10    /// <summary>
 11    /// Registers PostgreSQL <c>LISTEN/NOTIFY</c> as the response channel — behind
 12    /// <see cref="IAsyncResponsePublisher"/>, <see cref="IAsyncResponseSubscriber"/>, and
 13    /// <see cref="IRecoverableAsyncResponseSubscriber"/> — together with the durable PostgreSQL
 14    /// recovery-state store. The host must register a shared <see cref="Npgsql.NpgsqlDataSource"/>
 15    /// singleton, typically from the application's existing PostgreSQL connection string.
 16    /// </summary>
 17    public static AsyncResponseRegistrationBuilder WithPostgreSqlChannel(
 18        this AsyncResponseRegistrationBuilder builder,
 19        Action<PostgreSqlAsyncResponseChannelOptions>? configure = null)
 20    {
 321        var services = builder.Services;
 322        services.AddOptions();
 323        if (configure is not null)
 324            services.Configure(configure);
 25
 326        services.TryAddSingleton<PostgreSqlChannelSql>();
 27
 328        services.TryAddSingleton<PostgreSqlRecoveryStateStore>();
 329        services.Replace(ServiceDescriptor.Singleton<IRecoveryStateStore>(provider => provider.GetRequiredService<Postgr
 330        services.Replace(ServiceDescriptor.Singleton<IRecoveryStateScanner>(provider => provider.GetRequiredService<Post
 31
 332        services.TryAddSingleton<PostgreSqlAsyncResponseChannel>();
 333        services.Replace(ServiceDescriptor.Singleton<IAsyncResponsePublisher>(provider => provider.GetRequiredService<Po
 334        services.Replace(ServiceDescriptor.Singleton<IRawAsyncResponsePublisher>(provider => provider.GetRequiredService
 335        services.Replace(ServiceDescriptor.Singleton<IAsyncResponseSubscriber>(provider => provider.GetRequiredService<P
 336        services.Replace(ServiceDescriptor.Singleton<IRecoverableAsyncResponseSubscriber>(provider => provider.GetRequir
 337        services.Replace(ServiceDescriptor.Singleton<IActiveSubscriberProbe>(provider => provider.GetRequiredService<Pos
 38
 339        services.Replace(ServiceDescriptor.Singleton<IRecoverableAsyncResponseBuilder>(provider => new RecoverableAsyncR
 340            provider.GetRequiredService<IRecoverableAsyncResponseSubscriber>(),
 341            provider.GetService<IWorkerTransport>(),
 342            provider.GetService<IAsyncResponseReplyTargetProvider>(),
 343            provider.GetRequiredService<AsyncResponseContextPropagation>())));
 344        services.Replace(ServiceDescriptor.Singleton<IAsyncResponseBuilder>(provider => provider.GetRequiredService<IRec
 45
 346        services.AddSingleton(new AsyncResponseChannelMarker(PostgreSqlAsyncResponseChannelOptions.ChannelName));
 347        return builder;
 48    }
 49}