EllanJiang/GameFramework · error · GameFrameworkException

Data provider helper is invalid.

Error message

Data provider helper is invalid.

What it means

DataProviderCreator.Create<T>() throws GameFrameworkException('Data provider helper is invalid.') when the dataProviderHelper argument is null. The IDataProviderHelper<T> supplies the loading/parsing strategy for the provider's data, so Create cannot construct a functional provider without it. This is the last of three fail-fast argument checks in Create.

Solutions

  1. Create and pass a concrete IDataProviderHelper<T> implementation to Create<T>
  2. Confirm the helper field/property is assigned before the Create call
  3. If the helper is resolved dynamically, assert the resolution returned a non-null instance

Example fix

// before
var provider = DataProviderCreator.Create<Player>(player, resourceManager, null);
// after
IDataProviderHelper<Player> helper = new PlayerDataProviderHelper();
var provider = DataProviderCreator.Create<Player>(player, resourceManager, helper);
Defensive patterns

Strategy: validation

Validate before calling

if (dataProviderHelper == null) throw new ArgumentNullException(nameof(dataProviderHelper));
DataProviderCreator.Create<T>(owner, resourceManager, dataProviderHelper);

Type guard

bool HasHelper<T>(IDataProviderHelper<T> helper) => helper != null;

Try / catch

try
{
    var provider = DataProviderCreator.Create<T>(owner, resourceManager, helper);
}
catch (GameFrameworkException ex) when (ex.Message == "Data provider helper is invalid.")
{
    // construct and pass a concrete IDataProviderHelper<T> implementation
}

Prevention

When it happens

Trigger: Calling DataProviderCreator.Create<T>(owner, resourceManager, null). Commonly caused by forgetting to instantiate the custom helper class, or an interface variable that was never assigned a concrete implementation.

Common situations: Implementing IDataProviderHelper<T> but forgetting to pass the instance; a field of type IDataProviderHelper<T> left null because the concrete helper was never constructed; renaming/refactoring removed the helper assignment.

Related errors


AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15). Data as JSON: /api/errors/1a041811f732a222. Report an issue: GitHub.

Appendix: source

Thrown at GameFramework/Base/DataProvider/DataProviderCreator.cs:68

        /// <param name="owner">数据提供者的持有者。</param>
        /// <param name="resourceManager">资源管理器。</param>
        /// <param name="dataProviderHelper">数据提供者辅助器。</param>
        /// <returns>创建的数据提供者。</returns>
        public static IDataProvider<T> Create<T>(T owner, IResourceManager resourceManager, IDataProviderHelper<T> dataProviderHelper)
        {
            if (owner == null)
            {
                throw new GameFrameworkException("Owner is invalid.");
            }

            if (resourceManager == null)
            {
                throw new GameFrameworkException("Resource manager is invalid.");
            }

            if (dataProviderHelper == null)
            {
                throw new GameFrameworkException("Data provider helper is invalid.");
            }

            DataProvider<T> dataProvider = new DataProvider<T>(owner);
            dataProvider.SetResourceManager(resourceManager);
            dataProvider.SetDataProviderHelper(dataProviderHelper);
            return dataProvider;
        }
    }
}

View on GitHub (pinned to d0c010b051)