/// <summary>
 /// Initializes a new instance of the <see cref="LazySession{TSessionState}"/> class.
 /// </summary>
 /// <param name="sessionOperation">Operation that holds operation part of session.</param>
 /// <param name="messages">Optional messages.</param>
 /// <param name="getOperations">Optional lazy operations getter.</param>
 /// <param name="executionOptions">Session execution options.</param>
 public LazySession(
     IOperation <TSessionState> sessionOperation,
     IMutableMessageList <Message> messages,
     Func <IReadOnlyCollection <IOperation> > getOperations,
     IExecutionOptions?executionOptions)
 {
     Operation        = sessionOperation.AssertArgumentNotNull(nameof(sessionOperation));
     Messages         = messages.AssertArgumentNotNull(nameof(messages));
     GetOperations    = getOperations.AssertArgumentNotNull(nameof(getOperations));
     ExecutionOptions = executionOptions;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MaterializedSession{TSessionState,TOperationState}"/> class.
 /// </summary>
 /// <param name="sessionOperation">Session state.</param>
 /// <param name="messages">Messages.</param>
 /// <param name="operations">Operations.</param>
 /// <param name="executionOptions">Session execution options.</param>
 public MaterializedSession(
     IOperation <TSessionState> sessionOperation,
     IMutableMessageList <Message> messages,
     IReadOnlyCollection <IOperation <TOperationState> > operations,
     IExecutionOptions?executionOptions)
 {
     Operation        = sessionOperation.AssertArgumentNotNull(nameof(sessionOperation));
     Messages         = messages.AssertArgumentNotNull(nameof(messages));
     Operations       = operations.AssertArgumentNotNull(nameof(operations));
     GetOperations    = () => Operations;
     ExecutionOptions = executionOptions;
 }
Exemplo n.º 3
0
        /// <inheritdoc />
        public IOperation <TOperationState> UpdateOperation(OperationId operationId, [DisallowNull] IOperation <TOperationState> updatedOperation)
        {
            updatedOperation.AssertArgumentNotNull(nameof(updatedOperation));
            IOperation <TOperationState> operation = GetOperationOrThrow(operationId);

            if (!updatedOperation.Id.Equals(operationId))
            {
                throw new OperationManagerException(Errors.OperationIdDoesNotMatch(
                                                        providedOperationId: updatedOperation.Id,
                                                        existingOperationId: operationId));
            }

            if (!ReferenceEquals(updatedOperation, operation))
            {
                _operations.TryUpdate(operationId, updatedOperation, operation);
            }

            return(updatedOperation);
        }