eventDispatcher = $eventDispatcher; } /** * @since 2.2 * * @return self */ public static function getInstance() { if ( self::$instance === null ) { self::$instance = new self( self::newEventDispatcher() ); } return self::$instance; } /** * @since 2.2 */ public static function clear() { self::$instance = null; } /** * @since 2.2 * * @return EventDispatcher */ public function getEventDispatcher() { return $this->eventDispatcher; } /** * @since 2.2 * * @return DispatchContext */ public function newDispatchContext() { return EventDispatcherFactory::getInstance()->newDispatchContext(); } /** * @since 2.3 * * @param string $event * @param Closure $callback */ public function addCallbackListener( $event, \Closure $callback ) { $listener = EventDispatcherFactory::getInstance()->newGenericCallbackEventListener(); $listener->registerCallback( $callback ); $this->getEventDispatcher()->addListener( $event, $listener ); } private static function newEventDispatcher() { $eventListenerRegistry = new EventListenerRegistry( EventDispatcherFactory::getInstance()->newGenericEventListenerCollection() ); $eventDispatcher = EventDispatcherFactory::getInstance()->newGenericEventDispatcher(); $eventDispatcher->addListenerCollection( $eventListenerRegistry ); return $eventDispatcher; } }