/// <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;
 }