有没有办法在服务中注入事件以使服务与事件无关?
在散文
中:服务说:嘿,给我任何事件,我会在我完成工作后实例化它并触发它。
我想这很困难,因为事件的结构可能非常不同:
Event1 需要构造函数中的三个参数,而 Event2 只有一个。
目的是减少捆绑包中的依赖关系,同时让 fe 自定义记录器能够灵活地挂接到服务中。
我怎样才能实现这样的目标?
也许反过来:触发服务事件并使侦听器事件不可知?
有没有办法在服务中注入事件以使服务与事件无关?
在散文
中:服务说:嘿,给我任何事件,我会在我完成工作后实例化它并触发它。
我想这很困难,因为事件的结构可能非常不同:
Event1 需要构造函数中的三个参数,而 Event2 只有一个。
目的是减少捆绑包中的依赖关系,同时让 fe 自定义记录器能够灵活地挂接到服务中。
我怎样才能实现这样的目标?
也许反过来:触发服务事件并使侦听器事件不可知?
如果服务的调用者确实知道事件的参数并且事件的侦听器确实知道事件,那么就有可能创建事件。
我的示例基于 Symfony2 烹饪书中的示例:如何在不使用继承的情况下扩展类。
通常你会发送这样的事件:
$event = new HandleUndefinedMethodEvent($this, $method, $arguments);
$this->dispatcher->dispatch('foo.method_is_not_found', $event);
在您的服务中,您可以添加一个方法来创建新事件:
public function createEvent($name, $class, $arguments)
{
...
$eventClass = new \ReflectionClass($class);
$event = $eventClass->newInstanceArgs($arguments);
$this->dispatcher->dispatch($name, $event);
}
在这种情况下,服务不需要知道事件,但是,如上所述,调用者和侦听器都必须知道。