AddAsiBackbone Builder Facade
AsiBackbone.DependencyInjection provides a single discoverable dependency injection entry point for coordinating host-selected provider registrations:
builder.Services.AddAsiBackbone(backbone =>
{
backbone.UseAspNetCoreEndpointGovernance();
backbone.UseEfCoreAuditLedger<ApplicationDbContext>();
backbone.UseEfCoreAuditLifecycle<ApplicationDbContext>();
backbone.UseEfCoreGovernanceOutbox<ApplicationDbContext>();
backbone.UseGovernanceOutboxDrain();
backbone.UseManagedKeySigning(options =>
{
options.KeyId = "host-owned-key";
options.KeyVersion = "v1";
options.ProviderName = "host-managed-key";
});
backbone.UseOpenTelemetryEmission();
});
The facade is intentionally a coordination surface, not a bootstrapper. It does not select persistence, signing, telemetry, endpoint governance, local-development storage, or outbox delivery by itself.
Package home decision
The builder facade lives in AsiBackbone.DependencyInjection rather than Core or ASP.NET Core.
This keeps AsiBackbone.Core framework-neutral and avoids forcing ASP.NET Core, EF Core, OpenTelemetry, signing, storage, cloud, or hosting dependencies into the core governance primitives. It also avoids making ASP.NET Core the owner of a builder shape that is useful for worker services, console hosts, gateways, and other non-web applications.
Provider packages own their own builder extension methods:
| Provider package | Example builder calls |
|---|---|
AsiBackbone.AspNetCore |
UseAspNetCoreEndpointGovernance(), UseGovernanceOutboxDrain() |
AsiBackbone.EntityFrameworkCore |
UseEfCoreAuditLedger<TDbContext>(), UseEfCoreAuditLifecycle<TDbContext>(), UseEfCoreGovernanceOutbox<TDbContext>() |
AsiBackbone.Storage.InMemory |
UseInMemoryAuditLedger(), UseInMemoryAuditLifecycle(), UseInMemoryGovernanceOutbox() |
AsiBackbone.Signing.LocalDevelopment |
UseLocalDevelopmentSigning() |
AsiBackbone.Signing.ManagedKey |
UseManagedKeySigning(...) |
AsiBackbone.OpenTelemetry |
UseOpenTelemetryEmission() |
A host only sees the provider calls for packages it references.
Manual registration remains the baseline
The builder does not replace manual dependency injection. Each Use* method maps to explicit service registrations the host could write directly.
Manual ASP.NET Core endpoint governance registration:
builder.Services.AddAsiBackboneAspNetCore();
Builder equivalent:
builder.Services.AddAsiBackbone(backbone =>
{
backbone.UseAspNetCoreEndpointGovernance();
});
Manual EF Core audit ledger registration:
builder.Services.AddScoped<DbContext>(provider =>
provider.GetRequiredService<ApplicationDbContext>());
builder.Services.AddScoped<IAsiBackboneAuditLedgerStore, EfCoreAuditLedgerStore>();
Builder equivalent:
builder.Services.AddAsiBackbone(backbone =>
{
backbone.UseEfCoreAuditLedger<ApplicationDbContext>();
});
Manual OpenTelemetry emission provider registration:
builder.Services.AddSingleton(new OpenTelemetryGovernanceEmitterOptions());
builder.Services.AddSingleton<OpenTelemetryGovernanceEmitter>();
builder.Services.AddSingleton<IAsiBackboneGovernanceEmitter>(provider =>
provider.GetRequiredService<OpenTelemetryGovernanceEmitter>());
Builder equivalent:
builder.Services.AddAsiBackbone(backbone =>
{
backbone.UseOpenTelemetryEmission();
});
Local-development example
Local-development storage and signing remain explicit. They are useful for samples and tests, not production accountability storage or production key custody.
builder.Services.AddAsiBackbone(backbone =>
{
backbone.UseInMemoryAuditLedger();
backbone.UseInMemoryAuditLifecycle();
backbone.UseInMemoryGovernanceOutbox();
backbone.UseLocalDevelopmentSigning();
});
Empty and partial configuration
An empty builder callback does not register hidden defaults:
builder.Services.AddAsiBackbone(_ => { });
A partial callback only registers the provider calls named by the host:
builder.Services.AddAsiBackbone(backbone =>
{
backbone.UseOpenTelemetryEmission();
});
That example does not add EF Core, ASP.NET Core endpoint governance, signing, local-development storage, or outbox drain worker services.
Boundary
Use the builder when a host wants one fluent place to coordinate explicit AsiBackbone provider selections. Use manual registration when a host wants maximum clarity or has custom persistence, signing, telemetry, or gateway infrastructure.
Both approaches preserve the same boundary: AsiBackbone provides accountable decision-flow infrastructure, while the host remains responsible for database configuration, key custody, telemetry exporters, execution behavior, deployment hardening, and compliance review.