public Task RunAsync <TM>(IMessageContext <TM> messageContext, CancellationToken cancellationToken = default) where TM : IMessage { if (messageContext == null) { throw new ArgumentNullException(nameof(messageContext)); } //TODO: an event can be handled by multiple sagas var types = _stateTypeResolver.Resolve <TM>(); if (default == types) { throw new SagaNotFoundException($"no saga registered for message of type '{typeof(TM).FullName}'"); } var runnerType = _typesCache.GetGeneric(typeof(ISagaRunner <,>), types.sagaType, types.sagaStateType); var runner = _serviceProvider.GetService(runnerType); if (null == runner) { throw new SagaNotFoundException($"no saga registered on DI for message of type '{typeof(TM).FullName}'"); } return(RunAsyncCore(messageContext, runner, cancellationToken)); }
public Task RunAsync <TM>(IMessageContext <TM> messageContext, CancellationToken cancellationToken = default) where TM : IMessage { if (messageContext == null) { throw new ArgumentNullException(nameof(messageContext)); } var sagaTypes = _stateTypeResolver.Resolve <TM>(); if (null == sagaTypes || !sagaTypes.Any()) { throw new SagaException($"no Saga registered for message of type '{typeof(TM).FullName}'"); } return(RunAsyncCore(messageContext, sagaTypes, cancellationToken)); }
public Task RunAsync <TM>(IMessageContext <TM> messageContext, CancellationToken cancellationToken = default) where TM : IMessage { if (messageContext == null) { throw new ArgumentNullException(nameof(messageContext)); } var sagaTypes = _stateTypeResolver.Resolve <TM>(); if (null == sagaTypes) { return(Task.CompletedTask); } return(RunAsyncCore(messageContext, sagaTypes, cancellationToken)); }