Stratara.Abstractions 3.1.4

dotnet add package Stratara.Abstractions --version 3.1.4
                    
NuGet\Install-Package Stratara.Abstractions -Version 3.1.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Stratara.Abstractions" Version="3.1.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Stratara.Abstractions" Version="3.1.4" />
                    
Directory.Packages.props
<PackageReference Include="Stratara.Abstractions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Stratara.Abstractions --version 3.1.4
                    
#r "nuget: Stratara.Abstractions, 3.1.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Stratara.Abstractions@3.1.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Stratara.Abstractions&version=3.1.4
                    
Install as a Cake Addin
#tool nuget:?package=Stratara.Abstractions&version=3.1.4
                    
Install as a Cake Tool

Stratara.Abstractions

License: FSL-1.1-MIT (Functional Source License — source-available; converts to MIT after 2 years). Not OSI-approved OSS.

Contract interfaces and wire-level POCO records for the Stratara framework. Library-safe — depends only on Microsoft.Extensions.DependencyInjection.Abstractions, Microsoft.Extensions.Logging.Abstractions, and Stratara.Contracts. No EF Core or message-bus runtime.

Use this when you need to reference Stratara types without pulling in any concrete implementation (Mediator runtime, EF Core, RabbitMQ, etc.). Typical consumers: handler/projection libraries that ship without a host.

Contents

  • Stratara.Abstractions.MediatorIMediator, IRequest, IRequest<T>, ICommand, ICommand<T>, IQuery<T>, ICommandHandler<T>, IQueryHandler<T,R>, IPipelineBehavior<T>, IPipelineBehavior<T,R>, IAggregateScopedCommand.
  • Stratara.Abstractions.EventSourcingIAggregationService, IEventSource, IEventStreamRepository, ISnapshotRepository, IEvent, IEvent<T>, IAggregateCreationEvent, IChangeSetHandler, EventChainAnchor, EventSubject, ConcurrencyException. Plus wire-types: EventStreamEntry, Snapshot.
  • Stratara.Abstractions.PersistenceIUnitOfWork, IWriteUnitOfWork, IReadUnitOfWork, ITransaction, IDbResolver.
  • Stratara.Abstractions.OutboxICommandOutboxDispatcher, IEventBundleOutboxDispatcher, IOutboxRepository. Plus wire-type OutboxEntry.
  • Stratara.Abstractions.MessagingIMessageBus, IMessagingIdentifier, IEventBusConsumer, IEventBusPublisher.
  • Stratara.Abstractions.SessionISessionContextProvider.
  • Stratara.Abstractions.MultitenancyITenantService, ICurrentUserService, ITenantScopedRequest, ICrossTenantAuthorizer, TenantAccessDeniedException.
  • Stratara.Abstractions.ProjectionsIProjectionReplayState.
  • Stratara.Abstractions.SecurityIEncryptionFactory, IKeyStore, IMasterKeyProvider, ISecureBlobEncryptor, ISecureJsonSerializer. Plus wire-types: KeyScope, KeyMaterial, EncryptedData, DataSensitivityLevel, EncryptDataAttribute.
  • Stratara.Abstractions.ValidationIValidator<T>, ValidationResult, ValidationFailure, ValidationSeverity, StrataraValidationException.
  • Stratara.Abstractions.EntitiesIEntity, IBucket, IHasRowVersion, IMultiTenant, ITenantEntity, IUserIdentity.
  • Stratara.Abstractions.BackgroundTasksIBackgroundTaskQueue. Plus wire-types: BackgroundTaskInfo, BackgroundTaskStatus.
  • Stratara.Abstractions.CommandsIUpdateCommand.
  • Stratara.Abstractions.AuthorizationRequireRoleAttribute, IAuthorizationProvider, AuthorizationException.

Why split

NuGet consumers without an event-sourcing host can adopt Stratara's CQRS contracts and authorization model without dragging in EF Core, RabbitMQ, or the WriteStore.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (12)

Showing the top 5 NuGet packages that depend on Stratara.Abstractions:

Package Downloads
Stratara.Sessions

ASP.NET Core middleware and provider for Stratara's Actor/Subject session model. Reads tenant and user from JWT claims (or X-Tenant-Id / X-Client-Id headers) and populates the ambient ISessionContextProvider for every request.

Stratara.Mediator

In-process mediator with DI-resolved handlers and pipeline behaviors for the Stratara framework. MediatR-style routing via typed wrapper cache, plus an authorizing decorator and a bucket-lock concurrency primitive.

Stratara.Resilience

Polly-based named resilience pipelines pre-wired for the Stratara framework's messaging and command/event dispatch paths. Three named pipelines registered via AddResiliencePipelines().

Stratara.Domain

Concrete domain types for the Stratara framework — the Tenant aggregate and its lifecycle events. Stratara's opinionated multitenancy model.

Stratara.Shared

Umbrella package for the Stratara framework — source-generated logger extensions for outbox / saga / projection / messaging, domain-event helpers, merge primitives, and the Tier-A/B abstractions surface re-exported as one transitive bundle.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.1.4 42 6/15/2026
3.1.3 224 6/10/2026
3.1.2 306 6/5/2026
3.1.1 889 6/1/2026
3.1.0 284 5/30/2026
3.0.23 267 5/28/2026

### Added

- **Command-workload isolation (heavy-command lane)** — long-running commands can now be routed to a
 dedicated worker lane so they cannot starve interactive commands. Mark a command with the new
 `Stratara.Abstractions.Mediator.IHeavyCommand` marker and the `ICommandOutboxDispatcher`
 automatically publishes it to a separate heavy-command topic (`IMessagingIdentifier.HeavyCommandTopic` /
 `HeavyCommandSubscription`, configurable under `Messaging:HeavyCommand`, defaulting to `heavy-command` /
 `heavy-command-subscription`). Run a dedicated heavy-command worker with the new
 `services.AddHeavyCommandWorker(degreeOfParallelism?)` extension, or the
 `builder.AddHeavyCommandWorkerServices(degreeOfParallelism?)` host composite — in the same process as
 the interactive worker (two lanes) or in a separately scaled host. Each worker's degree of parallelism
 is configurable per lane. `IMessagingIdentifier` gains `HeavyCommandTopic`, `HeavyCommandSubscription`,
 and the `GetCommandTopic(Type)` / `GetCommandSubscription(Type)` routing helpers. The interactive lane
 (`AddMediatorWorker()`) is unchanged and remains the default; commands not marked heavy keep their
 existing routing. If a heavy command is dispatched while no heavy worker is bound, the publish is
 rejected and the command is preserved in the outbox until a heavy-command worker comes online — it is
 never dropped. Works over both the RabbitMQ and Azure Service Bus message buses (Azure Service Bus
 requires the heavy-command topic/subscription to be provisioned, like the existing command topic). New
 log-event ID `105_005` (`CommandWorkerLaneStarted`) in `Stratara.Diagnostics`.
- **Observability metrics across the worker pipeline** (`Stratara.Diagnostics`) — the shared
 `Stratara.Service` meter now publishes throughput and latency instruments so operators can see how the
 event-sourcing pipeline is behaving instead of flying blind on a single counter. New instruments:
 `event_source.events.appended` (counter, tagged by `event.type` / `aggregate.type`),
 `outbox.published` (counter, tagged by `outbox.kind` = `command` / `event`), `command.duration`
 (histogram, ms, tagged by `request.type` / `outcome`), `projection.events.processed` (counter) +
 `projection.bundle.duration` (histogram, ms), `saga.events.processed` (counter) +
 `saga.bundle.duration` (histogram, ms), and `saga.inflight` (up/down counter). They are recorded by the
 event source, command worker, projection worker, saga worker, and outbox worker respectively. Because
 projections and sagas are real-time bus subscribers without a persisted checkpoint, these report
 **throughput and latency**, not consumer lag. No configuration is required — point any OpenTelemetry
 metrics exporter at the `Stratara.Service` meter.
- **Operational health checks for the event store and outbox** (`Stratara.EventSourcing.EntityFrameworkCore`) —
 two opt-in readiness checks added to any `IHealthChecksBuilder`: `AddEventStoreHealthCheck()` verifies
 the write-side database is reachable, and `AddOutboxHealthCheck(degradedThreshold?, unhealthyThreshold?)`
 reports the pending outbox backlog (exposed under the `pending` data key) and escalates to
 `Degraded` / `Unhealthy` when the backlog crosses the supplied thresholds. Both are tagged `ready` by
 default (so they map to a readiness endpoint, not liveness) and require the Stratara write store to be
 registered. The write-store DbContext is now also resolvable as a scoped `IWriteDbContext` service to
 support these checks.
- **Polly-backed mediator resilience behavior** (`Stratara.Resilience`) — an opt-in pipeline behavior
 wraps the in-process dispatch of a request marked with the new
 `Stratara.Abstractions.Resilience.IResilientRequest` in the named Polly pipeline the request selects
 (`ResiliencePipelineName`). Register it with the new `AddStrataraResilienceBehavior()` (after
 `AddStrataraValidation()` / `AddStrataraTenantIsolation()` so the retry wraps the handler, not the
 guards); requests without the marker are unaffected. A new built-in pipeline
 `ResilienceNames.ConcurrencyConflict` retries **only** on
 `Stratara.Abstractions.Persistence.ConcurrencyConflictException` (5 attempts, short exponential
 backoff) so a handler that re-reads and re-applies on an optimistic-concurrency clash succeeds without
 bespoke retry loops; it is registered by `AddResiliencePipelines()` alongside the existing message-bus
 and dispatcher pipelines. Only mark handlers that are safe to re-run (idempotent or concurrency-guarded).