Exemplo n.º 1
0
        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);
        }