MediatR README

The project's README from github.com/LuckyPennySoftware/MediatR. As one markdown file: README.md.

MediatR

CI NuGet NuGet MyGet (dev)

Simple mediator implementation in .NET

In-process messaging with no dependencies.

Supports request/response, commands, queries, notifications and events, synchronous and async with intelligent dispatching via C# generic variance.

Examples in the wiki.

Installing MediatR

You should install MediatR with NuGet:

Install-Package MediatR

Or via the .NET Core command line interface:

dotnet add package MediatR

Either commands, from Package Manager Console or .NET Core CLI, will download and install MediatR and all required dependencies.

Using Contracts-Only Package

To reference only the contracts for MediatR, which includes:

Add a package reference to MediatR.Contracts

This package is useful in scenarios where your MediatR contracts are in a separate assembly/project from handlers. Example scenarios include:

Registering with IServiceCollection

MediatR supports Microsoft.Extensions.DependencyInjection.Abstractions directly. To register various MediatR services and handlers:

services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Startup>());

or with an assembly:

services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Startup).Assembly));

This registers:

This also registers open generic implementations for:

To register behaviors, stream behaviors, pre/post processors:

services.AddMediatR(cfg => {
    cfg.RegisterServicesFromAssembly(typeof(Startup).Assembly);
    cfg.AddBehavior<PingPongBehavior>();
    cfg.AddStreamBehavior<PingPongStreamBehavior>();
    cfg.AddRequestPreProcessor<PingPreProcessor>();
    cfg.AddRequestPostProcessor<PingPongPostProcessor>();
    cfg.AddOpenBehavior(typeof(GenericBehavior<,>));
    });

With additional methods for open generics and overloads for explicit service types.

Setting the license key

You can set the license key when registering MediatR:

services.AddMediatR(cfg => 
{
    cfg.LicenseKey = "<license key here>";
})

Or if not using Microsoft.Extensions.DependencyInjection:

Mediator.LicenseKey = "<license key here>";

[!TIP] The license key does not need to be set on client applications (such as Blazor WASM). Turn off the license warning by configuring logging in your logging start configuration: builder.Logging.AddFilter("LuckyPennySoftware.MediatR.License", LogLevel.None);

Auto-discovery via environment variables

If no license key is set in code, MediatR looks for one in environment variables. This is convenient for containerized and cloud environments, and for enterprises that share a single key across many services without code changes:

The license key is resolved in the following order of precedence, using the first value found:

  1. An explicit value set in code (cfg.LicenseKey or Mediator.LicenseKey).
  2. The MEDIATR_LICENSE_KEY environment variable.
  3. The LUCKYPENNY_LICENSE_KEY environment variable.

No code change is required when using an environment variable—just register MediatR as usual without setting the license key.

You can register for your license key at MediatR.io

MediatR (LuckyPennySoftware/MediatR)

nuget
Searching Database…

11.9K ·GitHub
What is this?MediatR is a .NET library that implements the mediator pattern for in-process messaging, letting you send requests, commands, queries, notifications and events through one mediator object instead of wiring handlers together directly.
Is this a framework or just a library?It is a small library you drop into any .NET project; it does not impose an application architecture, it just gives you request/response and publish/subscribe dispatching with generic variance.
How do I add it to my project?Install it via NuGet with 'Install-Package MediatR' or 'dotnet add package MediatR', then register it with 'AddMediatR' on your IServiceCollection so IMediator, ISender, IPublisher and your handlers get registered as transient services.
Does it need a DI container to work?It integrates directly with Microsoft.Extensions.DependencyInjection.Abstractions for registration; beyond that it has no required dependencies.
Do I need to set up a license key?Yes, recent versions require a license key, which you can set in code or via the MEDIATRLICENSEKEY / LUCKYPENNYLICENSEKEY environment variables after registering at MediatR.io; client-side apps like Blazor WASM don't need to set it themselves.
What is the MediatR.Contracts package for?It lets you reference just the interfaces (IRequest, INotification, IStreamRequest) separately from your handlers, which is handy when contracts live in a different assembly, like API or gRPC contract projects or Blazor apps.
Can I add cross-cutting logic like logging or validation around requests?Yes, you can register pipeline behaviors, stream behaviors, and pre/post processors that wrap handler execution for things like logging, validation, or exception handling.
Does it support streaming responses?Yes, besides regular request/response and notifications, MediatR supports streaming requests via IStreamRequest and IStreamRequestHandler.
Does the shared LuckyPenny license key also cover AutoMapper?The LUCKYPENNYLICENSEKEY variable is shared across Lucky Penny products, but it only validates for MediatR if the license includes a Bundle or MediatR edition — an AutoMapper-only license won't work here.
Size
6 MB
Stars
11.9K
Age
12y
Commits · 90 Days