{"record":{"id":"b4a39aaf14bb56b4","repo":"EllanJiang/GameFramework","slug":"object-pool-manager-is-invalid","errorCode":null,"errorMessage":"Object pool manager is invalid.","messagePattern":"Object pool manager is invalid\\.","errorType":"exception","errorClass":"GameFrameworkException","httpStatus":null,"severity":"error","filePath":"GameFramework/Entity/EntityManager.cs","lineNumber":208,"sourceCode":"        internal override void Shutdown()\n        {\n            m_IsShutdown = true;\n            HideAllLoadedEntities();\n            m_EntityGroups.Clear();\n            m_EntitiesBeingLoaded.Clear();\n            m_EntitiesToReleaseOnLoad.Clear();\n            m_RecycleQueue.Clear();\n        }\n\n        /// <summary>\n        /// 设置对象池管理器。\n        /// </summary>\n        /// <param name=\"objectPoolManager\">对象池管理器。</param>\n        public void SetObjectPoolManager(IObjectPoolManager objectPoolManager)\n        {\n            if (objectPoolManager == null)\n            {\n                throw new GameFrameworkException(\"Object pool manager is invalid.\");\n            }\n\n            m_ObjectPoolManager = objectPoolManager;\n        }\n\n        /// <summary>\n        /// 设置资源管理器。\n        /// </summary>\n        /// <param name=\"resourceManager\">资源管理器。</param>\n        public void SetResourceManager(IResourceManager resourceManager)\n        {\n            if (resourceManager == null)\n            {\n                throw new GameFrameworkException(\"Resource manager is invalid.\");\n            }\n\n            m_ResourceManager = resourceManager;\n        }","sourceCodeStart":190,"sourceCodeEnd":226,"githubUrl":"https://github.com/EllanJiang/GameFramework/blob/d0c010b05167c58e92350449d04864a91ca13fd2/GameFramework/Entity/EntityManager.cs#L190-L226","documentation":"EntityManager.SetObjectPoolManager rejects a null IObjectPoolManager argument. The entity system stores unspawned entities in object pools, so it cannot operate without an object pool manager; passing null means the manager would be left in a non-functional state, and the framework throws a GameFrameworkException instead of silently accepting it.","triggerScenarios":"Calling EntityManager.SetObjectPoolManager(null), typically during framework initialization when the ObjectPool component was not yet created or was retrieved with a lookup that returned null.","commonSituations":"Initialization order mistakes: calling SetObjectPoolManager before adding/initializing the ObjectPoolComponent, typos in component retrieval, or custom bootstrap code that skips dependency injection of the object pool manager.","solutions":["Ensure the ObjectPoolComponent (IObjectPoolManager) is created and initialized before calling SetObjectPoolManager.","Check that the code retrieving the object pool manager returns a valid instance, not null.","Fix initialization order in your bootstrap/GameEntry so EntityComponent depends on ObjectPoolComponent."],"exampleFix":"// before\nm_EntityManager.SetObjectPoolManager(null); // throws\n\n// after\nIObjectPoolManager objectPoolManager = GameEntry.GetComponent<ObjectPoolComponent>();\nif (objectPoolManager != null)\n{\n    m_EntityManager.SetObjectPoolManager(objectPoolManager);\n}","handlingStrategy":"validation","validationCode":"IObjectPoolManager poolManager = GameEntry.GetComponent<ObjectPoolComponent>();\nif (poolManager == null) throw new InvalidOperationException(\"ObjectPoolComponent must be initialized before entity manager\");","typeGuard":"bool HasObjectPoolManager(EntityManager em) => em != null && em.ObjectPoolManager != null;","tryCatchPattern":"try\n{\n    entityManager.SetObjectPoolManager(poolManager);\n}\ncatch (GameFrameworkException ex)\n{\n    Debug.LogError($\"Entity init failed: {ex.Message}\");\n}","preventionTips":["Initialize ObjectPoolComponent before EntityComponent in GameEntry.","Assert non-null dependencies at startup rather than passing them blindly.","Use a single bootstrap sequence for all framework manager wiring."],"tags":["gameframework","entity","null-argument","initialization"],"backgroundTag":"null-argument","analyzedSha":"d0c010b05167c58e92350449d04864a91ca13fd2","analyzedAt":"2026-09-15T13:37:15.352Z","contentChangedAt":"2026-09-15T13:37:15.352Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}