TinyMediator 1.1.1
dotnet add package TinyMediator --version 1.1.1
NuGet\Install-Package TinyMediator -Version 1.1.1
<PackageReference Include="TinyMediator" Version="1.1.1" />
<PackageVersion Include="TinyMediator" Version="1.1.1" />
<PackageReference Include="TinyMediator" />
paket add TinyMediator --version 1.1.1
#r "nuget: TinyMediator, 1.1.1"
#:package TinyMediator@1.1.1
#addin nuget:?package=TinyMediator&version=1.1.1
#tool nuget:?package=TinyMediator&version=1.1.1
TinyMediator
A lightweight implementation of the Mediator pattern—with built-in source generation for automatic handler registration. Designed for minimal boilerplate and fast compile-time discovery.
Installation
via Nuget:
Install-Package TinyMediator
This will register both the mediator classes and the source-generating analyzer.
Features
This library is intended to be clean and purpose-built, without fluff. But it does include:
- ✅ A mimimal mediator abstraction, supporting "fire-and-forget" and typed responses
- ✅ Source-generated DI registration (no reflection)
- ✅ Configurable handler lifetimes (scoped by default)
- ✅ No unnecessary marker interfaces
Basic Usage
- Define a Request and Handler
public class Ping { }
public class PingHandler : IRequestHandler<Ping, Pong>
{
public Task<Pong> Handle(Ping request, CancellationToken cancellationToken)
=> Task.FromResult(new Pong());
}
- Register Handlers Automatically
Add this line (or equivalent) to your Program.cs
and all of your IRequestHandler
implementations
will be automatically registered from the generated source at compile time.
services.AddTinyMediatorHandlers();
- Send Requests
var response = await mediator.Send(new Ping());
Handler Lifetimes
By default, handlers are registered with a scoped lifetime for easy use of scoped services like HttpClients and DbContexts. If you want your handler to have a different lifetime, you can declare that:
[HandlerLifetime(TinyMediator.ServiceLifetime.Singleton)]
public class PingHandler : IRequestHandler<Ping, Pong>
{
public Task<Pong> Handle(Ping request, CancellationToken cancellationToken)
=> Task.FromResult(new Pong());
}
What's Inside
Component | Description |
---|---|
IRequestHandler<TRequest> |
Mediator pattern "fire and forget" abstraction |
IRequestHandler<TRequest, TResponse> |
Mediator pattern abstraction with typed response |
Source Generator | Auto-discovers and registers handlers at compile time |
AddTinyMediatorHandlers() |
Method generated for DI registration |
Contributions
There are many robust (and complicated, or commercial) libraries out there that implement the Mediator pattern. I made this library for the simplest use cases and wanted source generation to automate registrations without using reflection. If this is generally useful to others I might be surprised, but any suggestions or contributions are welcome.
License
MIT - Use, modify, and distribute it freely in open source and commercial projects.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. 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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.CSharp (>= 4.13.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
- Fix potentially misplaced Roslyn notification message in the source generator.