/// <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;
 }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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);
            }
        }