protected async Task HandleMessage(Message msg) { var eventType = msg.UserProperties["type"] as string; var domainEvent = _eventSerializer.Deserialize <Guid>(eventType, msg.Body); if (null == domainEvent) { throw new SerializationException($"unable to deserialize event {eventType} : {msg.Body}"); } var @event = EventReceivedFactory.Create((dynamic)domainEvent); await _mediator.Publish(@event, CancellationToken.None); }
public IEventConsumer Build <TAggregateRoot, TKey>() where TAggregateRoot : IAggregateRoot <TKey> { using var scope = scopeFactory.CreateScope(); var consumer = scope.ServiceProvider.GetRequiredService <IEventConsumer <TAggregateRoot, TKey> >(); async Task OnEventReceived(object sender, IDomainEvent <TKey> receivedEvent) { var @event = EventReceivedFactory.Create((dynamic)receivedEvent); using var innerScope = scopeFactory.CreateScope(); var mediator = innerScope.ServiceProvider.GetRequiredService <IMediator>(); await mediator.Publish(@event, CancellationToken.None); } consumer.EventReceived += OnEventReceived; return(consumer); }