{"record":{"id":"047a7a1bd61ec5fa","repo":"EllanJiang/GameFramework","slug":"data-provider-helper-is-invalid","errorCode":null,"errorMessage":"Data provider helper is invalid.","messagePattern":"Data provider helper is invalid\\.","errorType":"exception","errorClass":"GameFrameworkException","httpStatus":null,"severity":"error","filePath":"GameFramework/Base/DataProvider/DataProvider.cs","lineNumber":396,"sourceCode":"        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        }\n\n        private void LoadAssetSuccessCallback(string dataAssetName, object dataAsset, float duration, object userData)\n        {\n            try\n            {\n                if (!m_DataProviderHelper.ReadData(m_Owner, dataAssetName, dataAsset, userData))\n                {\n                    throw new GameFrameworkException(Utility.Text.Format(\"Load data failure in data provider helper, data asset name '{0}'.\", dataAssetName));\n                }\n\n                if (m_ReadDataSuccessEventHandler != null)\n                {\n                    ReadDataSuccessEventArgs loadDataSuccessEventArgs = ReadDataSuccessEventArgs.Create(dataAssetName, duration, userData);\n                    m_ReadDataSuccessEventHandler(this, loadDataSuccessEventArgs);","sourceCodeStart":378,"sourceCodeEnd":414,"githubUrl":"https://github.com/EllanJiang/GameFramework/blob/d0c010b05167c58e92350449d04864a91ca13fd2/GameFramework/Base/DataProvider/DataProvider.cs#L378-L414","documentation":"DataProvider needs an IDataProviderHelper<T> that knows how to read data assets. SetDataProviderHelper throws GameFrameworkException if the helper passed in is null, because without a helper no data can ever be read. This guard runs during DataProvider creation.","triggerScenarios":"Calling DataProvider.Create (or internal init) with a null dataProviderHelper, e.g. forgetting to construct a custom IDataProviderHelper<T> implementation or passing a failed helper instantiation.","commonSituations":"Forgetting to register a data provider helper when wiring the data provider; a helper factory returning null; refactoring away the helper class while still calling Create.","solutions":["Pass a non-null IDataProviderHelper<T> implementation (default or custom) when creating the DataProvider.","Verify your custom helper class is instantiated, not just its type.","Check that any helper factory/dependency injection actually returns an instance.","Initialize helpers before the DataProvider create call in the startup sequence."],"exampleFix":"// before\ndataProvider.Create(gameObject, resourceManager, null);\n// after\nIDataProviderHelper<DataProviderTest> helper = new DataProviderHelper();\ndataProvider.Create(gameObject, resourceManager, helper);","handlingStrategy":"validation","validationCode":"IDataProviderHelper<T> helper = new DefaultDataProviderHelper(); // or your custom helper\nif (helper == null)\n{\n    throw new InvalidOperationException(\"DataProviderHelper must not be null\");\n}\ndataProvider.Create(gameObject, resourceManager, helper);","typeGuard":"bool IsValidHelper<T>(IDataProviderHelper<T> helper) => helper != null;","tryCatchPattern":null,"preventionTips":["Always instantiate a concrete IDataProviderHelper<T> before Create.","Beware factories/DI returning null helpers — assert on construction.","Keep a default helper wired in tests so setup mistakes surface early."],"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"}