RShared.Mediator 10.0.4

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

RShared.Mediator

Минимальный mediator: одно сообщение — один хендлер. Без пайплайнов, мидлварей и фан-аута — только точечный диспетч через DI.

Как работает

  • Хендлеры регистрируются по закрытым интерфейсам IMessageHandler<TMessage> / IMessageHandler<TRequest, TResponse> как scoped.
  • Медиатор — scoped; на Send из скоупа резолвится только нужный хендлер и только его зависимости, а не все хендлеры разом.
  • Попытка зарегистрировать два хендлера на одно сообщение — ошибка на старте, а не сюрприз в рантайме.

Подключение

builder.AddMediator();        // WebApplicationBuilder
// или
services.AddMediator();       // IServiceCollection

Опции MediatorOption:

  • AddHandlers = true (по умолчанию) — автоскан реализаций IMessageHandler по сборкам и их регистрация;
  • Assemblies — какие сборки сканировать; не задано — все загруженные в AppDomain.

Открытые generic-хендлеры (class MyHandler<T> : IMessageHandler<T>) скан не берёт — регистрируй руками:

services.AddScoped(typeof(IMessageHandler<>), typeof(MyHandler<>));

Использование

// сообщение
public record Ping(string Text);

// хендлер сообщения
public class PingHandler : IMessageHandler<Ping>
{
	public Task HandleAsync(Ping message, CancellationToken cancellationToken = default)
	{
		return Task.CompletedTask;
	}
}

// запрос с ответом
public record Echo(string Text);

public class EchoHandler : IMessageHandler<Echo, string>
{
	public Task<string> HandleAsync(Echo request, CancellationToken cancellationToken = default)
	{
		return Task.FromResult($"echo: {request.Text}");
	}
}

Отправка:

await mediator.SendAsync(new Ping("привет"));

string answer = await mediator.SendAsync<Echo, string>(new Echo("привет"));

Хендлер не зарегистрирован — InvalidOperationException от DI с точным именем интерфейса, который не найден.

Изменения с 0.1

Хендлеры больше не регистрируются маркером IMessageHandler: инъекция IEnumerable<IMessageHandler> больше не собирает хендлеры, диспетч идёт только по закрытым интерфейсам.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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.
  • net10.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
10.0.4 96 9/9/2026
10.0.3 104 9/9/2026
0.0.3 129 1/11/2026
0.0.2 134 1/11/2026
0.0.1 131 1/11/2026