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',然后在 IServiceCollection 上调用 'AddMediatR' 进行注册。这样 IMediator、ISender、IPublisher 以及你的处理程序都会以瞬时(transient)服务的形式注册。
它需要依赖注入容器才能工作吗?它直接与 Microsoft.Extensions.DependencyInjection.Abstractions 集成来完成注册。除此之外,它没有任何必需的依赖项。
我需要设置许可证密钥吗?需要。较新的版本要求许可证密钥,你可以在 MediatR.io 注册后,在代码中设置,或通过环境变量 MEDIATRLICENSEKEY / LUCKYPENNYLICENSEKEY 进行设置。Blazor WASM 等客户端应用本身无需设置。
MediatR.Contracts 包是做什么用的?它让你可以单独引用接口(IRequest、INotification、IStreamRequest),而无需引用处理程序。当契约位于其他程序集中时很方便,例如 API 或 gRPC 契约项目,以及 Blazor 应用。
我可以在请求前后添加日志记录或验证等横切逻辑吗?可以。你可以注册管道行为(pipeline behaviors)、流行为(stream behaviors)以及前置/后置处理器,它们会包裹处理程序的执行过程,用于日志记录、验证或异常处理等场景。
它支持流式响应吗?支持。除了常规的请求/响应和通知之外,MediatR 还通过 IStreamRequest 和 IStreamRequestHandler 支持流式请求。
共享的 LuckyPenny 许可证密钥也适用于 AutoMapper 吗?LUCKYPENNYLICENSEKEY 变量在 Lucky Penny 各产品之间共享,但只有许可证包含 Bundle 或 MediatR 版本时,它才会对 MediatR 生效。仅限 AutoMapper 的许可证在这里无法使用。
Size
6 MB
Stars
11.9K
Age
12y
Commits · 90 Days