public DispatchToSagas( ILog log, IResolver resolver, ISagaStore sagaStore, ISagaDefinitionService sagaDefinitionService, ISagaErrorHandler sagaErrorHandler) { _log = log; _resolver = resolver; _sagaStore = sagaStore; _sagaDefinitionService = sagaDefinitionService; _sagaErrorHandler = sagaErrorHandler; }
public DispatchToSagas( ILogger <DispatchToSagas> logger, IServiceProvider serviceProvider, ISagaStore sagaStore, ISagaDefinitionService sagaDefinitionService, ISagaErrorHandler sagaErrorHandler, ISagaUpdateResilienceStrategy sagaUpdateLog) { _logger = logger; _serviceProvider = serviceProvider; _sagaStore = sagaStore; _sagaDefinitionService = sagaDefinitionService; _sagaErrorHandler = sagaErrorHandler; _sagaUpdateLog = sagaUpdateLog; }
public DispatchToSagas( ILog log, IResolver resolver, ISagaStore sagaStore, ISagaDefinitionService sagaDefinitionService, ISagaErrorHandler sagaErrorHandler, ISagaUpdateResilienceStrategy sagaUpdateLog) { _log = log; _resolver = resolver; _sagaStore = sagaStore; _sagaDefinitionService = sagaDefinitionService; _sagaErrorHandler = sagaErrorHandler; _sagaUpdateLog = sagaUpdateLog; }
private async Task ProcessSagaAsync( IDomainEvent domainEvent, ISagaId sagaId, SagaDetails details, CancellationToken cancellationToken) { try { _log.Verbose(() => $"Loading saga '{details.SagaType.PrettyPrint()}' with ID '{sagaId}'"); await _sagaStore.UpdateAsync( sagaId, details.SagaType, domainEvent.Metadata.EventId, (s, c) => UpdateSagaAsync(s, domainEvent, details, c), cancellationToken) .ConfigureAwait(false); } catch (Exception e) { // Search for a specific SagaErrorHandler<Saga> based on saga type ISagaErrorHandler specificSagaErrorHandler = _sagaErrorHandlerFactory(details.SagaType); bool handled = specificSagaErrorHandler != null ? await specificSagaErrorHandler.HandleAsync(sagaId, details, e, cancellationToken).ConfigureAwait(false) : await _sagaErrorHandler.HandleAsync(sagaId, details, e, cancellationToken).ConfigureAwait(false); if (handled) { return; } _log.Error(e, $"Failed to process domain event '{domainEvent.EventType}' for saga '{details.SagaType.PrettyPrint()}'"); throw; } }