{"record":{"id":"e3578b486e2bdc95","repo":"iflytek/astron-agent","slug":"no-factory-registered-for-the-service-class-service-name","errorCode":null,"errorMessage":"No factory registered for the service class '{service_name.name}'","messagePattern":"No factory registered for the service class '(.+?)'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"core/workflow/extensions/middleware/manager.py","lineNumber":96,"sourceCode":"        :param service_name: The name of the service to create\n        \"\"\"\n        logger.info(f\"🔍 Creating service: {service_name}\")\n        self._validate_service_creation(service_name)\n\n        # Create the actual service\n        self.services[service_name] = self.factories[service_name].create(**config)\n        self.services[service_name].set_ready()\n        logger.info(f\"✅ Service {service_name} created successfully\")\n\n    def _validate_service_creation(self, service_name: ServiceType) -> None:\n        \"\"\"\n        Validate that a factory exists for the given service.\n\n        :param service_name: The name of the service to validate\n        :raises ValueError: If no factory is registered for the service\n        \"\"\"\n        if service_name not in self.factories:\n            raise ValueError(\n                f\"No factory registered for the service class '{service_name.name}'\"\n            )\n\n\n# Global service manager instance\nservice_manager = ServiceManager()\n","sourceCodeStart":78,"sourceCodeEnd":103,"githubUrl":"https://github.com/iflytek/astron-agent/blob/5e758547a83371a5a4b29dadf4ac03e8dd527635/core/workflow/extensions/middleware/manager.py#L78-L103","documentation":"ServiceManager._validate_service_creation raises ValueError when the requested service class has no factory registered in self.factories. The manager can only construct services whose class was previously registered via a register/register_factory call.","triggerScenarios":"Calling service_manager.create_service(SomeServiceClass) (or get_service) where SomeServiceClass was never passed to register_factory; a typo in the service class; using a service class defined in a module whose registration code was never imported at startup.","commonSituations":"Forgetting to import the factory registration module (e.g. the masdk factory) before boot; renaming a service class so the registration key no longer matches; adding a new middleware service without registering its factory.","solutions":["Register a factory for the service class before creating it: service_manager.register_factory(ServiceClass, FactoryClass).","Ensure the module containing register_factory calls is imported at application startup (check lifespan/init code).","Verify the exact class object passed to create_service matches the one registered (same import path, no duplicate class definitions).","Grep for 'register_factory' to see which services are registered in this deployment."],"exampleFix":"// before\nservice = service_manager.create_service(MASDKService)  # ValueError: no factory\n// after\nfrom workflow.extensions.middleware.masdk.factory import MASDKServiceFactory\nservice_manager.register_factory(MASDKService, MASDKServiceFactory)\nservice = service_manager.create_service(MASDKService)","handlingStrategy":"validation","validationCode":"if not hasattr(service_manager, \"factories\") or ServiceClass not in service_manager.factories:\n    raise RuntimeError(f\"{ServiceClass.__name__} factory not registered; call register_factory first\")","typeGuard":"def factory_registered(mgr, cls) -> bool:\n    return cls in getattr(mgr, \"factories\", {})","tryCatchPattern":"try:\n    service = service_manager.create_service(ServiceClass)\nexcept ValueError as e:\n    logger.error(f\"Service factory missing: {e}\")\n    raise","preventionTips":["Import all factory-registration modules in application startup (lifespan/init).","Register factories in one central bootstrap module.","Write a startup test asserting every service class used has a registered factory.","Avoid renaming service classes without updating registration keys."],"tags":["service-locator","dependency-injection","registration","workflow"],"backgroundTag":"missing-dependency","analyzedSha":"5e758547a83371a5a4b29dadf4ac03e8dd527635","analyzedAt":"2026-09-12T08:03:51.356Z","contentChangedAt":"2026-09-12T08:03:51.356Z","schemaVersion":2},"datasetVersion":"2026-09-19T12:17:13.211Z"}