{"record":{"id":"ff0a556d5710a79f","repo":"EllanJiang/GameFramework","slug":"resource-manager-is-invalid","errorCode":null,"errorMessage":"Resource manager is invalid.","messagePattern":"Resource manager is invalid\\.","errorType":"exception","errorClass":"GameFrameworkException","httpStatus":null,"severity":"error","filePath":"GameFramework/Base/DataProvider/DataProvider.cs","lineNumber":382,"sourceCode":"            {\n                if (exception is GameFrameworkException)\n                {\n                    throw;\n                }\n\n                throw new GameFrameworkException(Utility.Text.Format(\"Can not parse data bytes with exception '{0}'.\", exception), exception);\n            }\n        }\n\n        /// <summary>\n        /// 设置资源管理器。\n        /// </summary>\n        /// <param name=\"resourceManager\">资源管理器。</param>\n        internal 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        }\n\n        /// <summary>\n        /// 设置数据提供者辅助器。\n        /// </summary>\n        /// <param name=\"dataProviderHelper\">数据提供者辅助器。</param>\n        internal void SetDataProviderHelper(IDataProviderHelper<T> dataProviderHelper)\n        {\n            if (dataProviderHelper == null)\n            {\n                throw new GameFrameworkException(\"Data provider helper is invalid.\");\n            }\n\n            m_DataProviderHelper = dataProviderHelper;\n        }","sourceCodeStart":364,"sourceCodeEnd":400,"githubUrl":"https://github.com/EllanJiang/GameFramework/blob/d0c010b05167c58e92350449d04864a91ca13fd2/GameFramework/Base/DataProvider/DataProvider.cs#L364-L400","documentation":"DataProvider requires an IResourceManager before it can load data assets. SetResourceManager validates the argument and throws GameFrameworkException when a null resource manager is passed. This is an internal setup-time guard invoked during DataProvider creation.","triggerScenarios":"Calling DataProvider.Create (or internal initialization) with a null IResourceManager argument, typically when the Resource component has not been initialized or the resourceManager variable was not assigned.","commonSituations":"GameFramework initialization order mistakes: creating a data provider before the Resource component is built; passing an uninitialized/failed-to-create resource manager; refactoring that removed resource manager construction.","solutions":["Ensure the Resource component (IResourceManager) is created and initialized before calling DataProvider.Create.","Pass a valid, non-null IResourceManager instance to the create path.","Check initialization order so DataProvider setup happens after Resource module setup.","Log/inspect why the resource manager is null (failed startup, missing configuration)."],"exampleFix":"// before\ndataProvider.Create(gameObject, null, dataProviderHelper);\n// after\nIResourceManager resourceManager = gameFramework.GetComponent<ResourceComponent>().ResourceManager;\nif (resourceManager == null) { throw new InvalidOperationException(\"Resource component not initialized\"); }\ndataProvider.Create(gameObject, resourceManager, dataProviderHelper);","handlingStrategy":"validation","validationCode":"if (resourceManager == null)\n{\n    throw new InvalidOperationException(\"IResourceManager must be created before DataProvider.Create\");\n}\ndataProvider.Create(gameObject, resourceManager, dataProviderHelper);","typeGuard":"bool IsValidResourceManager(IResourceManager rm) => rm != null;","tryCatchPattern":null,"preventionTips":["Initialize the Resource component before any DataProvider creation.","Assert resourceManager != null early in the startup sequence.","Keep module initialization order documented and enforced in one bootstrap method."],"tags":["gameframework","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"}