< Summary

Information
Class: AsiBackbone.EntityFrameworkCore.AsiBackboneEntityFrameworkCoreBuilderExtensions
Assembly: AsiBackbone.EntityFrameworkCore
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.EntityFrameworkCore/AsiBackboneEntityFrameworkCoreBuilderExtensions.cs
Line coverage
100%
Covered lines: 24
Uncovered lines: 0
Coverable lines: 24
Total lines: 83
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
UseEfCoreAuditLedger(...)100%11100%
UseEfCoreAuditLifecycle(...)100%11100%
UseEfCoreGovernanceOutbox(...)100%11100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.EntityFrameworkCore/AsiBackboneEntityFrameworkCoreBuilderExtensions.cs

#LineLine coverage
 1using AsiBackbone.Core.Audit;
 2using AsiBackbone.Core.Outbox;
 3using AsiBackbone.DependencyInjection;
 4using AsiBackbone.EntityFrameworkCore.Audit;
 5using AsiBackbone.EntityFrameworkCore.Outbox;
 6using Microsoft.EntityFrameworkCore;
 7using Microsoft.Extensions.DependencyInjection;
 8
 9namespace AsiBackbone.EntityFrameworkCore;
 10
 11/// <summary>
 12/// Provides explicit builder facade extension methods for EF Core host-owned persistence.
 13/// </summary>
 14/// <remarks>
 15/// Each method binds its stores to the <c>TDbContext</c> named at that call site. The open <see cref="DbContext" />
 16/// service is never registered, so a host can point different stores at different contexts, and none of these calls
 17/// collide with a <see cref="DbContext" /> registration the host owns.
 18/// </remarks>
 19public static class AsiBackboneEntityFrameworkCoreBuilderExtensions
 20{
 21    /// <summary>
 22    /// Adds EF Core audit ledger storage through the AsiBackbone builder facade.
 23    /// </summary>
 24    /// <typeparam name="TDbContext">The host-owned context holding the audit ledger set.</typeparam>
 25    /// <param name="builder">The AsiBackbone builder.</param>
 26    /// <returns>The same builder so calls can be chained.</returns>
 27    public static IAsiBackboneBuilder UseEfCoreAuditLedger<TDbContext>(this IAsiBackboneBuilder builder)
 28        where TDbContext : DbContext
 29    {
 430        ArgumentNullException.ThrowIfNull(builder);
 31
 332        _ = builder.Services.AddScoped<IGovernanceAuditLedgerStore>(serviceProvider =>
 333            ActivatorUtilities.CreateInstance<EfCoreAuditLedgerStore>(
 334                serviceProvider,
 335                serviceProvider.GetRequiredService<TDbContext>()));
 36
 337        return builder;
 38    }
 39
 40    /// <summary>
 41    /// Adds EF Core decision receipt lifecycle storage through the AsiBackbone builder facade.
 42    /// </summary>
 43    /// <typeparam name="TDbContext">The host-owned context holding the lifecycle set.</typeparam>
 44    /// <param name="builder">The AsiBackbone builder.</param>
 45    /// <returns>The same builder so calls can be chained.</returns>
 46    public static IAsiBackboneBuilder UseEfCoreAuditLifecycle<TDbContext>(this IAsiBackboneBuilder builder)
 47        where TDbContext : DbContext
 48    {
 249        ArgumentNullException.ThrowIfNull(builder);
 50
 151        _ = builder.Services.AddScoped<IDecisionReceiptLifecycleStore>(serviceProvider =>
 152            ActivatorUtilities.CreateInstance<EfCoreDecisionReceiptLifecycleStore>(
 153                serviceProvider,
 154                serviceProvider.GetRequiredService<TDbContext>()));
 55
 156        return builder;
 57    }
 58
 59    /// <summary>
 60    /// Adds outcome-aware EF Core durable outbox storage through the AsiBackbone builder facade.
 61    /// </summary>
 62    /// <typeparam name="TDbContext">The host-owned context holding the outbox set.</typeparam>
 63    /// <param name="builder">The AsiBackbone builder.</param>
 64    /// <returns>The same builder so calls can be chained.</returns>
 65    public static IAsiBackboneBuilder UseEfCoreGovernanceOutbox<TDbContext>(this IAsiBackboneBuilder builder)
 66        where TDbContext : DbContext
 67    {
 368        ArgumentNullException.ThrowIfNull(builder);
 69
 270        _ = builder.Services.AddScoped(serviceProvider =>
 271            ActivatorUtilities.CreateInstance<EfCoreGovernanceOutboxOutcomeStore>(
 272                serviceProvider,
 273                serviceProvider.GetRequiredService<TDbContext>()));
 274        _ = builder.Services.AddScoped<IGovernanceOutboxClaimOutcomeStore>(serviceProvider =>
 275            serviceProvider.GetRequiredService<EfCoreGovernanceOutboxOutcomeStore>());
 276        _ = builder.Services.AddScoped<IGovernanceOutboxClaimStore>(serviceProvider =>
 277            serviceProvider.GetRequiredService<EfCoreGovernanceOutboxOutcomeStore>());
 278        _ = builder.Services.AddScoped<IGovernanceOutboxStore>(serviceProvider =>
 279            serviceProvider.GetRequiredService<EfCoreGovernanceOutboxOutcomeStore>());
 80
 281        return builder;
 82    }
 83}