0

サービスをイベントに依存しないようにするために、サービスにイベントを挿入する方法はありますか?
散文:
サービスによると:ねえ、イベントを教えてください。仕事が終わったら、イベントをインスタンス化して起動します。

イベントは非常に異なる構造にすることができるため、難しいと思います
。Event1はコンストラクターに3つのパラメーターを想定し、Event2は1つのみを想定しています。

目的は、バンドル内の依存関係を減らすと同時に、feカスタムロガーがサービスにフックできる柔軟性を与えることです。

どうすればこのようなことを達成できますか?

おそらく逆です。サービスのイベントを発生させ、リスナーイベントを不可知論にしますか?

4

1 に答える 1

1

サービスの呼び出し元がイベントの引数について知っていて、イベントのリスナーがイベントについて知っている場合、イベントを作成することが可能になります。

私の例は、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);
}

この場合、サービスはイベントについて知る必要はありませんが、前述のように、呼び出し側とリスナーの両方が知っている必要があります。

于 2012-09-14T12:34:08.683 に答える