PrismLibrary/Prism · error · ArgumentNullException
Value cannot be null. (Parameter 'moduleInitializer')
Error message
Value cannot be null. (Parameter 'moduleInitializer')
What it means
The ModuleManager constructor throws ArgumentNullException when the injected IModuleInitializer is null (and likewise for moduleCatalog). Prism requires both services to construct the manager; a null initializer usually means the DI container could not resolve IModuleInitializer.
Solutions
- Register the module initializer in the container (UsePrism/prism.ConfigureContainer does this by default)
- If constructing manually, pass a real or fake IModuleInitializer instance
- Check that you have not removed or overridden Prism's default service registrations
Example fix
// before var manager = new ModuleManager(initializer, catalog); // initializer null in tests // after var initializer = Substitute.For<IModuleInitializer>(); var manager = new ModuleManager(initializer, new ModuleCatalog());
Defensive patterns
Strategy: validation
Validate before calling
if (initializer is null)
throw new InvalidOperationException("IModuleInitializer is not registered — ensure UsePrism/Prism container setup ran");
var manager = new ModuleManager(initializer, moduleCatalog); Type guard
bool CanBuildModuleManager(IModuleInitializer init, IModuleCatalog catalog) => init is not null && catalog is not null;
Try / catch
try
{
var manager = new ModuleManager(initializer, catalog);
}
catch (ArgumentNullException ex)
{
logger.LogError(ex, "ModuleManager construction failed: {Param} missing — check DI registrations", ex.ParamName);
throw;
} Prevention
- Resolve IModuleInitializer from the container instead of constructing ModuleManager by hand
- In tests, supply a substitute IModuleInitializer and IModuleCatalog
- Avoid overriding Prism's default service registrations
When it happens
Trigger: new ModuleManager(null, catalog) manually; or DI misconfiguration where IModuleInitializer was never registered so a factory/custom container injects null.
Common situations: Manual instantiation in unit tests without providing a fake initializer; custom container extensions or missing AddPrism/module registrations; replacing Prism's service registrations and dropping IModuleInitializer.
Related errors
- Value cannot be null. (Parameter 'name')
- Value cannot be null. (Parameter 'dependsOn')
- Value cannot be null. (Parameter 'type')
- Value cannot be null. (Parameter 'moduleCatalog')
- Error creating dialog
AI-assisted analysis of PrismLibrary/Prism@358118cd64 (2026-09-15).
Data as JSON: /api/errors/c27773eb3a00f496.
Report an issue: GitHub.
Appendix: source
Thrown at src/Maui/Prism.Maui/Modularity/ModuleManager.cs:47
public event EventHandler<ModuleDownloadProgressChangedEventArgs> ModuleDownloadProgressChanged
{
add => throw new NotSupportedException();
remove => throw new NotSupportedException();
}
/// <summary>
/// The module initializer.
/// </summary>
protected IModuleInitializer ModuleInitializer { get; }
/// <summary>
/// Initializes an instance of the <see cref="ModuleManager"/> class.
/// </summary>
/// <param name="moduleInitializer">Service used for initialization of modules.</param>
/// <param name="moduleCatalog">Catalog that enumerates the modules to be loaded and initialized.</param>
public ModuleManager(IModuleInitializer moduleInitializer, IModuleCatalog moduleCatalog)
{
ModuleInitializer = moduleInitializer ?? throw new ArgumentNullException(nameof(moduleInitializer));
ModuleCatalog = moduleCatalog ?? throw new ArgumentNullException(nameof(moduleCatalog));
}
/// <summary>
/// Initializes the modules marked as <see cref="InitializationMode.WhenAvailable"/> in the <see cref="ModuleCatalog"/>.
/// </summary>
public void Run()
{
LoadModulesWhenAvailable();
}
/// <summary>
/// Loads and initializes the module in the <see cref="IModuleCatalog"/> with the name <paramref name="moduleName"/>.
/// </summary>
/// <param name="moduleName">Name of the module requested for initialization.</param>
public void LoadModule(string moduleName)
{
var modules = ModuleCatalog.Modules.Where(m => m.ModuleName == moduleName);View on GitHub (pinned to 358118cd64)