classFinder = $classFinder; $this->injectableFactory = $injectableFactory; $this->metadataProvider = $metadataProvider; } /** * Create a job by a scheduled job name. * * @return Job|JobDataLess * @throws Error */ public function create(string $name): object { $className = $this->getClassName($name); if (!$className) { throw new Error("Job '{$name}' not found."); } return $this->createByClassName($className); } /** * Create a job by a class name. * @param class-string $className * @return Job|JobDataLess */ public function createByClassName(string $className): object { $job = $this->injectableFactory->create($className); return $job; } /** * @return ?class-string */ private function getClassName(string $name): ?string { /** @var ?class-string $className */ $className = $this->metadataProvider->getJobClassName($name); if ($className) { return $className; } /** @var ?class-string */ return $this->classFinder->find('Jobs', ucfirst($name)); } }