public function listen($eventName, EventListener $eventListener = null)
    {

        if (!$this->isString($eventName) || $this->str($eventName)->length() == 0) {
            throw new EventManagerException(EventManagerException::INVALID_EVENT_NAME);
        }

        if ($this->isNull($eventListener)) {
            $eventListener = new EventListener();
        }

        $eventListeners = $this->events->key($eventName, [], true);
        $eventListeners[] = $eventListener;
        $this->events->key($eventName, $eventListeners);

        return $eventListener;
    }