有没有办法在服务中注入事件,以使服务类型与事件无关?
散文:
服务说:嘿,给我任何事件,我会在完成工作后将其解雇并开火。
我认为这很困难,因为事件的结构可能非常不同:
Event1期望构造函数中的三个参数和Event2中的一个参数。
目的是减少捆绑中的依赖关系,同时为fe自定义记录器提供灵活性以挂钩服务。
我怎样才能达到这样的目标?
也许相反:触发服务事件并使侦听器事件不可知?
答案 0 :(得分:1)
如果服务的调用者确实知道事件的参数,并且事件的监听器确实知道事件,则可以创建事件。
我的示例基于Symfony2烹饪书中的示例:How to extend a Class without using Inheritance。
通常情况下你会发送一个这样的事件:
$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);
}
在这种情况下,服务不需要知道事件,但是,如上所述,调用者和听者都必须知道。