static bool IsMessageAllowedToStartTheSaga(IInvokeHandlerContext context, SagaMetadata sagaMetadata) { if (context.Headers.ContainsKey(Headers.SagaId) && context.Headers.TryGetValue(Headers.SagaType, out var sagaType)) { //we want to move away from the assembly fully qualified name since that will break if you move sagas //between assemblies. We use the FullName instead, which is enough to identify the saga. if (sagaType.StartsWith(sagaMetadata.Name)) { //so now we have a saga id for this saga, and if we can't find it, we shouldn't start a new one return(false); } } return(context.MessageMetadata.MessageHierarchy.Any(messageType => sagaMetadata.IsMessageAllowedToStartTheSaga(messageType.FullName))); }
static bool IsMessageAllowedToStartTheSaga(LogicalMessage message, SagaMetadata sagaMetadata) { string sagaType; if (message.Headers.ContainsKey(Headers.SagaId) && message.Headers.TryGetValue(Headers.SagaType, out sagaType)) { //we want to move away from the assembly fully qualified name since that will break if you move sagas // between assemblies. We use the fullname instead which is enough to identify the saga if (sagaType.StartsWith(sagaMetadata.Name)) { //so now we have a saga id for this saga and if we can't find it we shouldn't start a new one return(false); } } return(message.Metadata.MessageHierarchy.Any(messageType => sagaMetadata.IsMessageAllowedToStartTheSaga(messageType.FullName))); }