public Connection(
     PipeReader input,
     IOutputHandler outputHandler,
     IReceiver receiver,
     IRequestRouter <IHandlerDescriptor?> requestRouter,
     IResponseRouter responseRouter,
     RequestInvoker requestInvoker,
     ILoggerFactory loggerFactory,
     OnUnhandledExceptionHandler onUnhandledException,
     CreateResponseExceptionHandler?getException = null
     ) =>
        public InputHandler(
            PipeReader pipeReader,
            IOutputHandler outputHandler,
            IReceiver receiver,
            IRequestRouter <IHandlerDescriptor?> requestRouter,
            IResponseRouter responseRouter,
            RequestInvoker requestInvoker,
            ILoggerFactory loggerFactory,
            OnUnhandledExceptionHandler unhandledInputProcessException,
            CreateResponseExceptionHandler?getException
            )
        {
            _pipeReader     = pipeReader;
            _outputHandler  = outputHandler;
            _receiver       = receiver;
            _requestRouter  = requestRouter;
            _responseRouter = responseRouter;
            _requestInvoker = requestInvoker;
            _unhandledInputProcessException = unhandledInputProcessException;
            _getException             = getException;
            _logger                   = loggerFactory.CreateLogger <InputHandler>();
            _headersBuffer            = new Memory <byte>(new byte[HeadersFinishedLength]);
            _contentLengthBuffer      = new Memory <byte>(new byte[ContentLengthLength]);
            _contentLengthValueBuffer = new byte[20];         // Max string length of the long value
            _contentLengthValueMemory =
                new Memory <byte>(_contentLengthValueBuffer); // Max string length of the long value
            _stopProcessing = new CancellationTokenSource();

            _disposable = new CompositeDisposable
            {
                Disposable.Create(() => _stopProcessing.Cancel()),
                _stopProcessing,
                _requestInvoker,
            };

            _inputActive = new AsyncSubject <Unit>();
            _inputQueue  = new Subject <IObservable <Unit> >();
        }