from punq import Container from typing import TypeVar from pyee import EventEmitter from kernel.event.listener import Listener T = TypeVar('T') class Registrar: _container: Container def __init__(self, container: Container) -> None: self._container = container def add_event_listener( self, event: str, listener: type[Listener[T]] ) -> None: async def callback(payload: T) -> None: listener_instance = listener(self._container) await listener_instance.handle(event, payload) self._container.resolve(EventEmitter).on(event, callback)