SimpleMediator

Railway Oriented Mediator for .NET 10

SimpleMediator is a lightweight, functional mediator abstraction for .NET applications that embraces Railway Oriented Programming (ROP) principles. Built on top of LanguageExt, it provides explicit request/response contracts, composable pipeline behaviors, and rich observability features for building maintainable CQRS-style applications.

.NET Quality Gate Coverage Mutation

Key Features

  • Functional Error Handling: All operations return Either<MediatorError, TValue> for explicit, type-safe error handling
  • Zero Exceptions Policy: Operational failures travel through functional rails instead of exceptions
  • Pipeline Composition: Ordered behaviors, pre-processors, and post-processors for cross-cutting concerns
  • Rich Observability: Built-in OpenTelemetry support with activities, metrics, and structured logging
  • CQRS Contracts: Explicit ICommand<T>, IQuery<T>, and INotification interfaces
  • Assembly Scanning: Automatic discovery and registration of handlers, behaviors, and processors
  • Functional Failure Detection: Translate domain envelopes into consistent mediator errors

Getting Started

Installation

dotnet add package SimpleMediator

Basic Configuration

using SimpleMediator;

services.AddSimpleMediator(cfg =>
{
    cfg.RegisterServicesFromAssemblyContaining<ApplicationMarker>()
       .AddPipelineBehavior(typeof(CommandActivityPipelineBehavior<,>))
       .AddPipelineBehavior(typeof(QueryMetricsPipelineBehavior<,>));
});

Send a Command

public sealed record RegisterUser(string Email, string Password) : ICommand<Unit>;

var result = await mediator.Send(new RegisterUser("user@example.com", "Pass@123"), ct);

result.Match(
    Left: error => logger.LogWarning("Registration failed: {Code}", error.GetMediatorCode()),
    Right: _ => logger.LogInformation("User registered successfully"));

Documentation

Quality Metrics

Metric Current Target Status
Line Coverage 92.5% ≥90% ✅ Exceeded
Branch Coverage 83.3% ≥85% 🟡 Near
Mutation Score 93.74% ≥95% 🟡 Near
Build Warnings 0 0 ✅ Perfect
XML Documentation 100% 100% ✅ Perfect
Tests Passing 204/204 100% ✅ Perfect

Architecture Highlights

  • Railway Oriented Programming: Explicit success/failure paths through Either<L, R>
  • Pipeline Pattern: Composable behaviors for validation, logging, metrics, and more
  • Dependency Injection: First-class support for Microsoft.Extensions.DependencyInjection
  • OpenTelemetry Ready: Built-in ActivitySource and Metrics support
  • Immutable Messages: Commands, queries, and notifications are record types

Resources


Built with ❤️ for the .NET community