Implementação simples de mediador em .NET
Mensagens em processo sem dependências.
Suporta solicitação/resposta, comandos, consultas, notificações e eventos, síncronos e assíncronos com despacho inteligente via variação genérica C#.
Exemplos no wiki.
Você deve instalar o MediatR com NuGet:
Install-Package MediatR
Ou por meio da interface de linha de comando do .NET Core:
dotnet add package MediatR
Qualquer um dos comandos, do Package Manager Console ou da CLI do .NET Core, baixará e instalará o MediatR e todas as dependências necessárias.
Para fazer referência apenas aos contratos do MediatR, que incluem:
IRequest
(incluindo variantes genéricas)INotification
IStreamRequest
Adicione uma referência de pacote a MediatR.Contracts
Este pacote é útil em cenários onde seus contratos MediatR estão em um assembly/projeto separado dos manipuladores. Cenários de exemplo incluem:
IServiceCollection
MediatR suporta Microsoft.Extensions.DependencyInjection.Abstractions
diretamente. Para registrar vários serviços e manipuladores MediatR:
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Startup>());
ou com uma montagem:
services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Startup).Assembly));
Isso registra:
IMediator
como transitórioISender
como transitórioIPublisher
como transitórioIRequestHandler<,>
implementações concretas como transitóriasIRequestHandler<>
implementações concretas como transitóriasINotificationHandler<>
implementações concretas como transitóriasIStreamRequestHandler<>
implementações concretas como transitóriasIRequestExceptionHandler<,,>
implementações concretas como transitóriasIRequestExceptionAction<,>)
implementações concretas como transitóriasIsso também registra implementações genéricas abertas para:
INotificationHandler<>
IRequestExceptionHandler<,,>
IRequestExceptionAction<,>
Para registrar comportamentos, comportamentos de fluxo, pré/pós-processadores:
services . AddMediatR ( cfg => {
cfg . RegisterServicesFromAssembly ( typeof ( Startup ) . Assembly ) ;
cfg . AddBehavior < PingPongBehavior > ( ) ;
cfg . AddStreamBehavior < PingPongStreamBehavior > ( ) ;
cfg . AddRequestPreProcessor < PingPreProcessor > ( ) ;
cfg . AddRequestPostProcessor < PingPongPostProcessor > ( ) ;
cfg . AddOpenBehavior ( typeof ( GenericBehavior < , > ) ) ;
} ) ;
Com métodos adicionais para genéricos abertos e sobrecargas para tipos de serviço explícitos.