FreeMediator 1.4.0

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

FreeMediator

FreeMediator is a free and open-source alternative to the popular MediatR package by Jimmy Bogard.

  • It strives to be a drop-in replacement for MediatR, with the same API and functionality, and is created purely on the background of MediatR going commercial.
  • It is not a fork of MediatR, but rather a new implementation that aims to be as compatible as possible with the original. Let me know in the Issues section if you find any incompatibilities.

As such the first version only deals with the basic stuff:

  • Sending requests and receiving responses
  • Pipeline behavior support for requests (both open and closed behaviors)
  • Publishing notifications
  • Generic request handlers of same arity as IRequestHandler<>, IRequestHandler<,>, IRequestHandler<,FIXED_TYPE> or IRequestHandler<FIXED_TYPE,> (the last two being partial arity match, check changelog v.1.2.0 for details)
  • Generic notification handlers of same arity as INotificationHandler<>

Feel free to send a PR if you want to add any missing features, (make sure to read CONTRIBUTING.md first).

OR just open an Issue for missing features, and I'll have a look.

Features outside of the original MediatR

  • Pipeline behavior support for notifications (both open and closed behaviors)

Current limitations

  • No support for streaming
  • No support for implementing multiple handlers in a single class if they have the same return type

Usage

FreeMediator is intended to be used with .Net Dependency Injection, so start off by adding it to your DI:

services.AddMediator(config => 
{
    config.RegisterServicesFromAssemblyContaining<SomeRequest>(); // There are other ways to register services as well
});

This will scan the assembly containing SomeRequest for all classes implementing IRequestHandler<TRequest, TResponse> and INotificationHandler<TNotification> and register them with the DI container.

It also registers the IMediator interface itself (as well as a ISender and IPublisher interface, which are both subsets of IMediator).

From here on simply inject IMediator (or ISender/IPublisher) into your classes and use it to send requests or publish notifications:

public class SomeService
{
    private readonly IMediator _mediator;

    public SomeService(IMediator mediator
    {
        _mediator = mediator;
    }

    public async Task<SomeResponse> DoSomethingAsync(CancellationToken cancellationToken)
    {
        var response = await _sender.Send(new SomeRequest(), cancellationToken);
        return response;
    }
}

Changelog

See the CHANGELOG for a list of changes and new features.

Documentation

Auto generated documentation via DocFx is available here: https://steffenskov.github.io/FreeMediator/

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.4.0 129 7/28/2025
1.3.1 98 7/28/2025
1.3.0 223 7/26/2025
1.2.0 125 5/2/2025
1.1.1 152 4/30/2025
1.1.0 167 4/29/2025
1.0.1 164 4/20/2025
1.0.0 104 4/19/2025
0.1.0 96 4/19/2025