/**
  * @param DomainMessage $domainMessage
  * @return void
  */
 public function handle(DomainMessage $domainMessage)
 {
     $event = $domainMessage->getPayload();
     $eventName = $this->nameExtractor->extract($event);
     $eventHandlers = $this->handlerLocator->getHandlersForEvent($eventName);
     foreach ($eventHandlers as $handler) {
         $methodName = $this->methodNameInflector->inflect($event, $handler);
         // is_callable is used here instead of method_exists, as method_exists
         // will fail when given a handler that relies on __call.
         if (!is_callable([$handler, $methodName])) {
             throw CanNotInvokeHandlerException::forEvent($event, sprintf("Method '%s' does not exist on handler", is_object($methodName) ? get_class($methodName) : gettype($methodName)));
         }
         $handler->{$methodName}($event, $domainMessage);
     }
 }