EllanJiang/GameFramework · error · GameFrameworkException
Can not create module
Error message
Can not create module '{0}'. What it means
CreateModule instantiates the resolved module type via Activator.CreateInstance and casts it to GameFrameworkModule. If instantiation produces null (or fails to yield a GameFrameworkModule), the framework throws this error because it cannot create the requested module instance.
Solutions
- Make the module class inherit from GameFrameworkModule and give it a public parameterless constructor
- Confirm the type passed to GetModule(Type) is the concrete module class, not an interface or unrelated class
- Step through with a debugger to inspect the exception thrown internally by Activator.CreateInstance (often wrapped/hidden)
Example fix
// before
internal sealed class MyModule : IMyModule { } // not a GameFrameworkModule
// after
internal sealed class MyModule : GameFrameworkModule, IMyModule
{
public MyModule() { }
protected internal override void Update(float elapseSeconds, float realElapseSeconds) { }
} Defensive patterns
Strategy: try-catch
Validate before calling
var moduleType = Type.GetType(expectedModuleName);
if (moduleType != null && typeof(GameFrameworkModule).IsAssignableFrom(moduleType) && moduleType.GetConstructor(Type.EmptyTypes) != null)
{
var module = GameFrameworkEntry.GetModule(moduleType);
} Type guard
static bool IsInstantiableGameFrameworkModule(Type t) => !t.IsAbstract && !t.IsInterface && typeof(GameFrameworkModule).IsAssignableFrom(t) && t.GetConstructor(Type.EmptyTypes) != null;
Try / catch
try { var m = GameFrameworkEntry.GetModule<T>(); }
catch (GameFrameworkException ex) { Debug.LogError($"Failed to create module {typeof(T)}: {ex.Message}"); } Prevention
- Derive every module class from GameFrameworkModule with a public parameterless constructor
- Never pass interfaces or abstract types as the module type
- Test module creation in an editor bootstrap before builds
When it happens
Trigger: Activator.CreateInstance(moduleType) returns null or a non-GameFrameworkModule object — e.g. the 'module type' resolved by naming convention is actually not a concrete GameFrameworkModule subclass, or an exotic type whose Activator.CreateInstance yields null.
Common situations: Custom module classes that do not inherit GameFrameworkModule; types with no accessible parameterless constructor in restricted environments; assembly issues causing the cast/creation to fail unexpectedly.
Related errors
- Object type is invalid.
- Object type is invalid.
- Object type is invalid.
- Resource manager is invalid.
- Data provider helper is invalid.
AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15).
Data as JSON: /api/errors/1c7a1049c28d8e1b.
Report an issue: GitHub.
Appendix: source
Thrown at GameFramework/Base/GameFrameworkEntry.cs:107
{
return module;
}
}
return CreateModule(moduleType);
}
/// <summary>
/// 创建游戏框架模块。
/// </summary>
/// <param name="moduleType">要创建的游戏框架模块类型。</param>
/// <returns>要创建的游戏框架模块。</returns>
private static GameFrameworkModule CreateModule(Type moduleType)
{
GameFrameworkModule module = (GameFrameworkModule)Activator.CreateInstance(moduleType);
if (module == null)
{
throw new GameFrameworkException(Utility.Text.Format("Can not create module '{0}'.", moduleType.FullName));
}
LinkedListNode<GameFrameworkModule> current = s_GameFrameworkModules.First;
while (current != null)
{
if (module.Priority > current.Value.Priority)
{
break;
}
current = current.Next;
}
if (current != null)
{
s_GameFrameworkModules.AddBefore(current, module);
}
elseView on GitHub (pinned to d0c010b051)