Skip to main content

OpinionatedEventing

Opinionated event-driven messaging for .NET — correctness and safe defaults over maximum flexibility.

NuGet.NETLicense

What it does

📦

Outbox-first publishing

Messages are written to the outbox table atomically with your business data. No direct broker publish path — the transactional guarantee is never optional.

🔀

Type-safe routing

IEvent fans out to all subscribers. ICommand routes point-to-point to exactly one handler. The compiler and DI container enforce the distinction at startup.

🔄

Saga orchestration

Stateful orchestrated sagas with timeouts and compensation. Or keep it simple with choreography-style ISagaParticipant for event-driven workflows.

🏗️

DDD aggregate support

Extend AggregateRoot, call RaiseDomainEvent, and SaveChanges does the rest. The DomainEventInterceptor harvests and outboxes events in one transaction.

☁️

Transport-agnostic

Swap between Azure Service Bus and RabbitMQ with a single DI registration change. Handler, aggregate, and saga code is identical for both transports.

📡

Aspire-ready & observable

One-line AppHost extensions for local development. Structured logging, distributed tracing, and metrics via standard .NET OpenTelemetry APIs.

Ready to get started?

Set up outbox-first event publishing in minutes.