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)

Searching Database…

11.9K ·GitHub
Что это такое?MediatR — это библиотека для .NET, которая реализует паттерн «посредник» для обмена сообщениями внутри процесса. Она позволяет отправлять запросы, команды, выборки данных, уведомления и события через один объект-посредник, вместо того чтобы напрямую связывать обработчики между собой.
Это фреймворк или просто библиотека?Это небольшая библиотека, которую можно подключить к любому .NET-проекту. Она не навязывает архитектуру приложения, а лишь даёт маршрутизацию запросов с ответом и публикацию/подписку с поддержкой вариантности обобщённых типов.
Как добавить это в мой проект?Установите библиотеку через NuGet командой 'Install-Package MediatR' или 'dotnet add package MediatR', затем зарегистрируйте её вызовом 'AddMediatR' для вашего IServiceCollection. После этого IMediator, ISender, IPublisher и ваши обработчики будут зарегистрированы как транзиентные сервисы.
Нужен ли для работы DI-контейнер?Для регистрации библиотека напрямую интегрируется с Microsoft.Extensions.DependencyInjection.Abstractions. Помимо этого, у неё нет обязательных зависимостей.
Нужно ли настраивать лицензионный ключ?Да, в новых версиях требуется лицензионный ключ. Его можно задать в коде или через переменные окружения MEDIATRLICENSEKEY / LUCKYPENNYLICENSEKEY после регистрации на MediatR.io. Клиентским приложениям, например Blazor WASM, задавать его самостоятельно не нужно.
Для чего нужен пакет MediatR.Contracts?Он позволяет подключать только интерфейсы (IRequest, INotification, IStreamRequest) отдельно от обработчиков. Это удобно, когда контракты находятся в другой сборке, например в проектах контрактов API или gRPC, или в приложениях Blazor.
Можно ли добавить сквозную логику, например логирование или валидацию, вокруг запросов?Да, можно зарегистрировать поведения конвейера (pipeline behaviors), потоковые поведения (stream behaviors), а также препроцессоры и постпроцессоры. Они оборачивают выполнение обработчика, например для логирования, валидации или обработки исключений.
Поддерживает ли библиотека потоковые ответы?Да, помимо обычных запросов с ответом и уведомлений, MediatR поддерживает потоковые запросы через IStreamRequest и IStreamRequestHandler.
Распространяется ли общий лицензионный ключ LuckyPenny и на AutoMapper?Переменная LUCKYPENNYLICENSEKEY общая для продуктов Lucky Penny, но для MediatR она работает только если лицензия включает Bundle или редакцию MediatR. Лицензия только на AutoMapper здесь не подойдёт.
Size
6 MB
Stars
11.9K
Age
12y
Commits · 90 Days