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

  1. Make the module class inherit from GameFrameworkModule and give it a public parameterless constructor
  2. Confirm the type passed to GetModule(Type) is the concrete module class, not an interface or unrelated class
  3. 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

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


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);
            }
            else

View on GitHub (pinned to d0c010b051)