Esempio n. 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="OperationManager{TSessionState, TOperationState}"/> class.
        /// </summary>
        /// <param name="sessionId">Session id.</param>
        /// <param name="sessionState">Initial session state.</param>
        /// <param name="sessionManager">Owner session manager.</param>
        /// <param name="executionOptions">Optional execution options. Also can be provided in Start method.</param>
        /// <param name="logger">Logger.</param>
        /// <param name="metadata">Optional metadata.</param>
        public OperationManager(
            OperationId sessionId,
            [DisallowNull] TSessionState sessionState,
            ISessionManager <TSessionState, TOperationState> sessionManager,
            IExecutionOptions <TSessionState, TOperationState>?executionOptions = null,
            ILogger?logger = null,
            IPropertyContainer?metadata = null)
        {
            sessionState.AssertArgumentNotNull(nameof(sessionState));
            sessionManager.AssertArgumentNotNull(nameof(sessionManager));

            _sessionManager = sessionManager;
            _logger         = logger ?? GetLoggerFactory().CreateLogger(sessionId.Value);
            _operations     = new ConcurrentDictionary <OperationId, IOperation <TOperationState> >();

            _session = Operation
                       .CreateNotStarted(sessionId, sessionState, metadata)
                       .ToSession(getOperations: GetOperations);

            if (executionOptions != null)
            {
                _session = _session.With(executionOptions: executionOptions);
            }

            ILoggerFactory GetLoggerFactory() =>
            (ILoggerFactory?)_sessionManager.Services.GetService(typeof(ILoggerFactory)) ?? NullLoggerFactory.Instance;
        }