ZeroAlloc.Mediator.Generator 1.1.6

dotnet add package ZeroAlloc.Mediator.Generator --version 1.1.6
                    
NuGet\Install-Package ZeroAlloc.Mediator.Generator -Version 1.1.6
                    
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="ZeroAlloc.Mediator.Generator" Version="1.1.6" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ZeroAlloc.Mediator.Generator" Version="1.1.6" />
                    
Directory.Packages.props
<PackageReference Include="ZeroAlloc.Mediator.Generator" />
                    
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 ZeroAlloc.Mediator.Generator --version 1.1.6
                    
#r "nuget: ZeroAlloc.Mediator.Generator, 1.1.6"
                    
#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 ZeroAlloc.Mediator.Generator@1.1.6
                    
#: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=ZeroAlloc.Mediator.Generator&version=1.1.6
                    
Install as a Cake Addin
#tool nuget:?package=ZeroAlloc.Mediator.Generator&version=1.1.6
                    
Install as a Cake Tool

ZeroAlloc.Mediator

NuGet Build License: MIT

ZeroAlloc.Mediator is a source-generated, zero-allocation mediator for .NET 8 and .NET 10. It supports request/response, notifications, and streaming without reflection or dynamic dispatch. The source generator eliminates the runtime overhead that reflection-based mediators incur by wiring all dispatch at compile time — no dictionaries, no virtual dispatch, no delegate allocation per request.

Install

dotnet add package ZeroAlloc.Mediator

The generator package must also be added as an analyzer:

<PackageReference Include="ZeroAlloc.Mediator.Generator" Version="*" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />

Example

// 1. Define a request record and its expected response type
public readonly record struct CreateOrder(string Product, int Qty) : IRequest<OrderId>;

// 2. Implement a handler — no constructor dependencies needed for this example
public class CreateOrderHandler : IRequestHandler<CreateOrder, OrderId>
{
    public ValueTask<OrderId> Handle(CreateOrder request, CancellationToken ct)
        => ValueTask.FromResult(OrderId.NewId());
}

// 3. Register IMediator with DI (the generator emits MediatorService automatically)
services.AddSingleton<IMediator, MediatorService>();

// 4. Send the request and use the result — fully strongly-typed, zero allocation
public class OrderController(IMediator mediator)
{
    public async Task<IResult> PlaceOrder(CreateOrder cmd, CancellationToken ct)
    {
        var id = await mediator.Send(cmd, ct);   // returns OrderId, no boxing
        return Results.Created($"/orders/{id}", id);
    }
}

Performance

ZeroAlloc.Mediator is 40–160x faster than MediatR with zero heap allocation on all non-streaming paths (.NET 10.0.4, i9-12900HK, BenchmarkDotNet).

Operation ZeroAlloc.Mediator MediatR Speedup Alloc
Send 0.5 ns 78.3 ns ~160x 0 B vs 224 B
Send + pipeline 2.8 ns 101.8 ns ~46x 0 B vs 152 B
Send (via IMediator DI) 5.8 ns 86.3 ns ~15x 0 B vs 224 B
Publish (1 handler) 6.1 ns 243.8 ns ~40x 0 B vs 792 B
Publish (multi handler) 6.6 ns 332.4 ns ~51x 0 B vs 1,032 B
Stream (5 items) 202.8 ns 654.4 ns ~3x 104 B vs 528 B

See docs/performance.md for the full benchmark table and zero-allocation design explanation.

Features

  • Request/Response — strongly-typed Send overloads per request type
  • Notifications — sequential or parallel ([ParallelNotification]) dispatch
  • StreamingIAsyncEnumerable<T> via CreateStream
  • Pipeline Behaviors — compile-time inlined middleware chain (logging, validation, etc.)
  • Polymorphic Notifications — base interface handlers are automatically included in concrete notification dispatch
  • Analyzer Diagnostics — missing handlers, duplicates, and misconfigurations are build errors/warnings
  • Zero AllocationValueTask, readonly record struct, static dispatch, no closures
  • Native AOT Compatible — no reflection at runtime; all dispatch is resolved at compile time by the source generator

Documentation

Page Description
Getting Started Install and send your first request in five minutes
Requests & Handlers Commands, queries, Unit responses, dispatch
Notifications Events: sequential, parallel, polymorphic handlers
Streaming IAsyncEnumerable<T> for large result sets
Pipeline Behaviors Compile-time middleware: logging, validation, caching
Dependency Injection DI containers, IMediator, factory delegates
Diagnostics ZAM001–ZAM007 compiler error reference with fixes
Performance Zero-alloc internals, benchmark results, Native AOT
Advanced Patterns Error handling, cancellation, scoped behaviors
Testing Unit-test handlers, behaviors, and notifications

License

MIT

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.6 0 3/19/2026
1.1.5 50 3/17/2026
1.1.4 49 3/17/2026
1.1.3 71 3/17/2026
1.1.2 70 3/17/2026
1.1.1 84 3/16/2026
1.1.0 79 3/16/2026
0.1.5 79 3/16/2026
0.1.4 75 3/15/2026