/// <summary> /// Initializes a new instance of the <see cref="PipelineContext"/> class. /// </summary> /// <param name="message">The message.</param> /// <param name="saga">The saga.</param> /// <param name="operationResult">The operation result. Null of operation have not finished</param> public PipelineContext(ISagaMessage message, IAccessibleSaga saga, OperationResult operationResult = null) { this.Message = message; this.AccessibleSaga = saga; SagaData = NSagaReflection.Get(saga, "SagaData"); OperationResult = operationResult; }
/// <summary> /// Gets the saga metadata from previous operations /// </summary> /// <param name="accessibleSaga">The accessible saga.</param> /// <param name="messageSerialiser">The message serialiser.</param> /// <returns></returns> public static SagaMetadata GetSagaMetadata(this IAccessibleSaga accessibleSaga, IMessageSerialiser messageSerialiser) { String serialisedMetadata; if (!accessibleSaga.Headers.TryGetValue(MetadataPipelineHook.MetadataKeyName, out serialisedMetadata)) { return(null); } var metadata = messageSerialiser.Deserialise <SagaMetadata>(serialisedMetadata); return(metadata); }
private void PersistSagaInstance(IAccessibleSaga saga) { Type persisterType = reflection.GetGenericTypeOf(typeof(ISagaPersister <>), saga); object persister = serviceLocator.Resolve(persisterType); if (saga.IsCompleted) { reflection.InvokeSagaPersisterComplete(persister, saga); } else { reflection.InvokeSagaPersisterSave(persister, saga); } }