'application/Espo/Services', 'modulePath' => 'application/Espo/Modules/{*}/Services', 'customPath' => 'custom/Espo/Custom/Services', ); protected $data; public function __construct(Container $container) { $this->container = $container; } protected function getFileManager() { return $this->container->get('fileManager'); } protected function getContainer() { return $this->container; } protected function init() { $classParser = $this->getContainer()->get('classParser'); $classParser->setAllowedMethods(null); $this->data = $classParser->getData($this->paths, $this->cacheFile); } protected function getClassName($name) { if (!isset($this->data)) { $this->init(); } if (isset($this->data[$name])) { return $this->data[$name]; } return false; } public function checkExists($name) { $className = $this->getClassName($name); if (!empty($className)) { return true; } } public function create($name) { $className = $this->getClassName($name); if (empty($className)) { throw new Error(); } return $this->createByClassName($className); } protected function createByClassName($className) { if (class_exists($className)) { $service = new $className(); $dependencies = $service->getDependencyList(); foreach ($dependencies as $name) { $service->inject($name, $this->container->get($name)); } return $service; } throw new Error("Class '$className' does not exist"); } }