Implementación de mediador simple en .NET
Mensajería en proceso sin dependencias.
Admite solicitudes/respuestas, comandos, consultas, notificaciones y eventos, sincrónicos y asíncronos con envío inteligente a través de una variación genérica de C#.
Ejemplos en la wiki.
Deberías instalar MediatR con NuGet:
Install-Package MediatR
O mediante la interfaz de línea de comandos de .NET Core:
dotnet add package MediatR
Cualquiera de los comandos, desde la consola del administrador de paquetes o la CLI de .NET Core, descargarán e instalarán MediatR y todas las dependencias necesarias.
Para hacer referencia únicamente a los contratos de MediatR, que incluye:
IRequest
(incluidas variantes genéricas)INotification
IStreamRequest
Agregar una referencia de paquete a MediatR.Contracts
Este paquete es útil en escenarios donde sus contratos de MediatR están en un ensamblaje/proyecto separado de los controladores. Los escenarios de ejemplo incluyen:
IServiceCollection
MediatR admite Microsoft.Extensions.DependencyInjection.Abstractions
directamente. Para registrar varios servicios y controladores de MediatR:
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Startup>());
o con una asamblea:
services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Startup).Assembly));
Esto registra:
IMediator
como transitorioISender
como transitorioIPublisher
como transitorioIRequestHandler<,>
implementaciones concretas como transitoriasIRequestHandler<>
implementaciones concretas como transitoriasINotificationHandler<>
implementaciones concretas como transitoriasIStreamRequestHandler<>
implementaciones concretas como transitoriasIRequestExceptionHandler<,,>
implementaciones concretas como transitoriasIRequestExceptionAction<,>)
implementaciones concretas como transitoriasEsto también registra implementaciones genéricas abiertas para:
INotificationHandler<>
IRequestExceptionHandler<,,>
IRequestExceptionAction<,>
Para registrar comportamientos, transmitir comportamientos, pre/postprocesadores:
services . AddMediatR ( cfg => {
cfg . RegisterServicesFromAssembly ( typeof ( Startup ) . Assembly ) ;
cfg . AddBehavior < PingPongBehavior > ( ) ;
cfg . AddStreamBehavior < PingPongStreamBehavior > ( ) ;
cfg . AddRequestPreProcessor < PingPreProcessor > ( ) ;
cfg . AddRequestPostProcessor < PingPongPostProcessor > ( ) ;
cfg . AddOpenBehavior ( typeof ( GenericBehavior < , > ) ) ;
} ) ;
Con métodos adicionales para genéricos abiertos y sobrecargas para tipos de servicios explícitos.