/**
  * Обработччик отвечающий за иньъекцию в менеджер workflow, поддержки запуска сервисов
  *
  * @param WorkflowManagerEvent $event
  */
 public function createWorkflowManager(WorkflowManagerEvent $event)
 {
     $workflowManager = $event->getWorkflowManager();
     $originalTypeResolver = $workflowManager->getResolver();
     $chainTypeResolver = $this->getChainTypeResolver();
     $resolver = $chainTypeResolver->add($originalTypeResolver, 0);
     $workflowTypeResolverEvent = new WorkflowTypeResolverEvent();
     $workflowTypeResolverEvent->setName(WorkflowTypeResolverEvent::INJECT_WORKFLOW_TYPE_RESOLVER);
     $workflowTypeResolverEvent->setWorkflowManager($workflowManager);
     $workflowTypeResolverEvent->setChainTypeResolver($chainTypeResolver);
     $workflowTypeResolverEvent->setTarget($this);
     $this->getEventManager()->trigger($workflowTypeResolverEvent);
     $workflowManager->setTypeResolver($resolver);
 }
 /**
  * @param ServiceLocatorInterface $serviceLocator
  * @param                         $name
  * @param                         $requestedName
  *
  * @return WorkflowInterface
  * @throws \Zend\ServiceManager\Exception\ServiceNotFoundException
  *
  * @throws \OldTown\Workflow\ZF2\Factory\Exception\FactoryException
  */
 public function createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
 {
     if (null === $this->workflowServiceNamePrefix) {
         $this->workflowServiceNamePrefix = $this->buildWorkflowServiceNamePrefix($serviceLocator);
     }
     $managerName = substr($requestedName, strlen($this->workflowServiceNamePrefix));
     try {
         $creationOptions = $this->getCreationOptions();
         if (array_key_exists(static::WORKFLOW_CONFIGURATION_NAME, $creationOptions)) {
             $this->setWorkflowConfigurationName($creationOptions[static::WORKFLOW_CONFIGURATION_NAME]);
         }
         /** @var ModuleOptions $moduleOptions */
         $moduleOptions = $serviceLocator->get(ModuleOptions::class);
         $managerOptions = $moduleOptions->getManagerOptions($managerName);
         $configName = $managerOptions->getConfiguration();
         $workflowManagerName = $managerOptions->getName();
         $workflowManager = null;
         if ($serviceLocator->has($workflowManagerName)) {
             $workflowManager = $serviceLocator->get($workflowManagerName);
         } elseif (class_exists($workflowManagerName)) {
             $r = new \ReflectionClass($workflowManagerName);
             $workflowManager = $r->newInstance($r);
         }
         if (!$workflowManager instanceof WorkflowInterface) {
             $errMsg = sprintf('Workflow not implements %s', WorkflowInterface::class);
             throw new Exception\InvalidWorkflowException($errMsg);
         }
         $configurationOptions = $moduleOptions->getConfigurationOptions($configName);
         $workflowConfig = $this->buildWorkflowManagerConfig($configurationOptions, $serviceLocator);
         $workflowManager->setConfiguration($workflowConfig);
         /** @var Workflow $workflowService */
         $workflowService = $serviceLocator->get(Workflow::class);
         $event = new WorkflowManagerEvent();
         $event->setWorkflowManager($workflowManager)->setName(WorkflowManagerEvent::EVENT_CREATE)->setTarget($workflowManager);
         $workflowService->getEventManager()->trigger($event);
     } catch (\Exception $e) {
         throw new Exception\FactoryException($e->getMessage(), $e->getCode(), $e);
     }
     return $workflowManager;
 }