Простая реализация посредника в .NET
Внутрипроцессный обмен сообщениями без каких-либо зависимостей.
Поддерживает запросы/ответы, команды, запросы, уведомления и события, синхронные и асинхронные, с интеллектуальной диспетчеризацией через общую вариацию C#.
Примеры в вики.
Вам следует установить MediatR с помощью NuGet:
Install-Package MediatR
Или через интерфейс командной строки .NET Core:
dotnet add package MediatR
Любая из команд из консоли диспетчера пакетов или интерфейса командной строки .NET Core загрузит и установит MediatR и все необходимые зависимости.
Для ссылки только на контракты для MediatR, которые включают в себя:
IRequest
(включая общие варианты)INotification
IStreamRequest
Добавьте ссылку на пакет в MediatR.Contracts.
Этот пакет полезен в сценариях, где ваши контракты MediatR находятся в отдельной сборке/проекте от обработчиков. Примеры сценариев включают:
IServiceCollection
MediatR напрямую поддерживает Microsoft.Extensions.DependencyInjection.Abstractions
. Чтобы зарегистрировать различные службы и обработчики MediatR:
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Startup>());
или со сборкой:
services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Startup).Assembly));
Это регистрирует:
IMediator
как временныйISender
как временныйIPublisher
как временныйIRequestHandler<,>
конкретные реализации как временныеIRequestHandler<>
конкретные реализации как временныеINotificationHandler<>
конкретные реализации как временныеIStreamRequestHandler<>
конкретные реализации как временныеIRequestExceptionHandler<,,>
конкретные реализации как временныеIRequestExceptionAction<,>)
конкретные реализации как временныеЭто также регистрирует открытые универсальные реализации для:
INotificationHandler<>
IRequestExceptionHandler<,,>
IRequestExceptionAction<,>
Чтобы зарегистрировать поведение, поведение потока, пре/постпроцессоры:
services . AddMediatR ( cfg => {
cfg . RegisterServicesFromAssembly ( typeof ( Startup ) . Assembly ) ;
cfg . AddBehavior < PingPongBehavior > ( ) ;
cfg . AddStreamBehavior < PingPongStreamBehavior > ( ) ;
cfg . AddRequestPreProcessor < PingPreProcessor > ( ) ;
cfg . AddRequestPostProcessor < PingPongPostProcessor > ( ) ;
cfg . AddOpenBehavior ( typeof ( GenericBehavior < , > ) ) ;
} ) ;
С дополнительными методами для открытых дженериков и перегрузками для явных типов сервисов.