public async Task Send(SagaConsumeContext <TSaga, TMessage> context)
            {
                var instance = context.Saga;

                if (_logger.IsDebugEnabled)
                {
                    _logger.DebugFormat("SAGA: {0}:{1} Added {2}", TypeMetadataCache <TSaga> .ShortName,
                                        instance.CorrelationId,
                                        TypeMetadataCache <TMessage> .ShortName);
                }

                SagaConsumeContext <TSaga, TMessage> proxy =
                    new EventStoreSagaConsumeContext <TSaga, TMessage>(_connection, context, instance);

                await _next.Send(proxy).ConfigureAwait(false);

                if (!proxy.IsCompleted)
                {
                    await _connection.SaveEvents(
                        instance.StreamName,
                        instance.GetChanges(),
                        instance.ExpectedVersion,
                        new EventMetadata { CorrelationId = instance.CorrelationId, CausationId = context.MessageId });
                }
            }
Ejemplo n.º 2
0
 public static Task PersistSagaInstance <T>(
     this IEventStoreConnection connection,
     T saga, ConsumeContext context, GetEventMetadata <T> getEventMetadata
     )
     where T : class, IEventSourcedSaga
 => connection.SaveEvents(
     saga.StreamName,
     saga.GetChanges().Select(x => (x, getEventMetadata(saga, context, x))),