0
0
mirror of https://github.com/alex289/CleanArchitecture.git synced 2025-06-29 18:21:08 +00:00
CleanArchitecture/CleanArchitecture.Infrastructure/InMemoryBus.cs
2023-09-02 12:34:08 +02:00

45 lines
1.3 KiB
C#

using System.Threading.Tasks;
using CleanArchitecture.Domain.Commands;
using CleanArchitecture.Domain.DomainEvents;
using CleanArchitecture.Domain.EventHandler.Fanout;
using CleanArchitecture.Domain.Interfaces;
using CleanArchitecture.Shared.Events;
using MediatR;
namespace CleanArchitecture.Infrastructure;
public sealed class InMemoryBus : IMediatorHandler
{
private readonly IDomainEventStore _domainEventStore;
private readonly IFanoutEventHandler _fanoutEventHandler;
private readonly IMediator _mediator;
public InMemoryBus(
IMediator mediator,
IDomainEventStore domainEventStore,
IFanoutEventHandler fanoutEventHandler)
{
_mediator = mediator;
_domainEventStore = domainEventStore;
_fanoutEventHandler = fanoutEventHandler;
}
public Task<TResponse> QueryAsync<TResponse>(IRequest<TResponse> query)
{
return _mediator.Send(query);
}
public async Task RaiseEventAsync<T>(T @event) where T : DomainEvent
{
await _domainEventStore.SaveAsync(@event);
await _mediator.Publish(@event);
await _fanoutEventHandler.HandleDomainEventAsync(@event);
}
public Task SendCommandAsync<T>(T command) where T : CommandBase
{
return _mediator.Send(command);
}
}