Biblioteca com implementação de Mediator para projetos .NET, focada em CQRS/CQS com baixo acoplamento entre camadas.
O pacote Tooark.Mediator fornece:
- implementação concreta de
IMediator; - registro automático de handlers por assembly;
- estratégia configurável de publicação de notificações;
- integração com DI do
Microsoft.Extensions.DependencyInjection.
dotnet add package Tooark.Mediatorusing Tooark.Mediator.Injections;
builder.Services.AddTooarkMediator(typeof(Program).Assembly);Também é possível configurar as opções do mediador:
using Tooark.Mediator.Enums;
using Tooark.Mediator.Injections;
builder.Services.AddTooarkMediator(options =>
{
options.NotifyPublishStrategy = ENotifyStrategy.Sequential;
}, typeof(Program).Assembly);Mediator: implementação deIMediator.
TooarkDependencyInjection.AddTooarkMediator(IServiceCollection, params Assembly[])TooarkDependencyInjection.AddTooarkMediator(IServiceCollection, Action<MediatorOptions>, params Assembly[])
MediatorOptionsNotifyPublishStrategy(padrão:ENotifyStrategy.ParallelWhenAll)
ENotifyStrategy.ParallelWhenAllENotifyStrategy.Sequential
IRequestHandler<TRequest, TResponse>ICommandHandler<TCommand, TResponse>ICommandHandler<TCommand>IQueryHandler<TQuery, TResponse>INotifyHandler<TNotify>
using Tooark.Mediator.Abstractions;
using Tooark.Mediator.Handlers;
public sealed record CreateUserCommand(string Name) : ICommand<Guid>;
public sealed class CreateUserCommandHandler : ICommandHandler<CreateUserCommand, Guid>
{
public Task<Guid> HandleAsync(CreateUserCommand request, CancellationToken cancellationToken = default)
{
return Task.FromResult(Guid.NewGuid());
}
}
public sealed record GetUserByIdQuery(Guid Id) : IQuery<string>;
public sealed class GetUserByIdQueryHandler : IQueryHandler<GetUserByIdQuery, string>
{
public Task<string> HandleAsync(GetUserByIdQuery request, CancellationToken cancellationToken = default)
{
return Task.FromResult($"Usuário {request.Id}");
}
}using Tooark.Mediator.Abstractions;
public sealed class UsersService(IMediator mediator)
{
public Task<Guid> CreateAsync(string name, CancellationToken cancellationToken)
{
return mediator.SendAsync(new CreateUserCommand(name), cancellationToken);
}
public Task<string> GetAsync(Guid id, CancellationToken cancellationToken)
{
return mediator.SendAsync(new GetUserByIdQuery(id), cancellationToken);
}
}using Tooark.Mediator.Abstractions;
using Tooark.Mediator.Handlers;
public sealed record UserCreatedNotify(Guid UserId) : INotify;
public sealed class UserCreatedNotifyHandler : INotifyHandler<UserCreatedNotify>
{
public Task HandleAsync(UserCreatedNotify notification, CancellationToken cancellationToken = default)
{
Console.WriteLine($"Usuário criado: {notification.UserId}");
return Task.CompletedTask;
}
}
await mediator.PublishAsync(new UserCreatedNotify(Guid.NewGuid()), cancellationToken);| Pacote | Versão | Descrição |
|---|---|---|
Tooark.Exceptions |
— | Exceções (ex.: BadRequestException) |
Tooark.Mediator.Abstractions |
— | Contratos base do padrão Mediator |
Microsoft.Extensions.DependencyInjection.Abstractions |
8.x | Abstrações de injeção de dependência |
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests no repositório Tooark.Mediator.
Este projeto está licenciado sob a licença BSD 3-Clause. Veja o arquivo LICENSE para mais detalhes.