{"record":{"id":"c27773eb3a00f496","repo":"PrismLibrary/Prism","slug":"value-cannot-be-null-parameter-moduleinitializer","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'moduleInitializer')","messagePattern":"Value cannot be null\\. \\(Parameter 'moduleInitializer'\\)","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Maui/Prism.Maui/Modularity/ModuleManager.cs","lineNumber":47,"sourceCode":"    public event EventHandler<ModuleDownloadProgressChangedEventArgs> ModuleDownloadProgressChanged\n    {\n        add => throw new NotSupportedException();\n        remove => throw new NotSupportedException();\n    }\n\n    /// <summary>\n    /// The module initializer.\n    /// </summary>\n    protected IModuleInitializer ModuleInitializer { get; }\n\n    /// <summary>\n    /// Initializes an instance of the <see cref=\"ModuleManager\"/> class.\n    /// </summary>\n    /// <param name=\"moduleInitializer\">Service used for initialization of modules.</param>\n    /// <param name=\"moduleCatalog\">Catalog that enumerates the modules to be loaded and initialized.</param>\n    public ModuleManager(IModuleInitializer moduleInitializer, IModuleCatalog moduleCatalog)\n    {\n        ModuleInitializer = moduleInitializer ?? throw new ArgumentNullException(nameof(moduleInitializer));\n        ModuleCatalog = moduleCatalog ?? throw new ArgumentNullException(nameof(moduleCatalog));\n    }\n\n    /// <summary>\n    /// Initializes the modules marked as <see cref=\"InitializationMode.WhenAvailable\"/> in the <see cref=\"ModuleCatalog\"/>.\n    /// </summary>\n    public void Run()\n    {\n        LoadModulesWhenAvailable();\n    }\n\n    /// <summary>\n    /// Loads and initializes the module in the <see cref=\"IModuleCatalog\"/> with the name <paramref name=\"moduleName\"/>.\n    /// </summary>\n    /// <param name=\"moduleName\">Name of the module requested for initialization.</param>\n    public void LoadModule(string moduleName)\n    {\n        var modules = ModuleCatalog.Modules.Where(m => m.ModuleName == moduleName);","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/PrismLibrary/Prism/blob/358118cd640d9a22ff8cf21c8ad197fa038b7990/src/Maui/Prism.Maui/Modularity/ModuleManager.cs#L29-L65","documentation":"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.","triggerScenarios":"new ModuleManager(null, catalog) manually; or DI misconfiguration where IModuleInitializer was never registered so a factory/custom container injects null.","commonSituations":"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.","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"],"exampleFix":"// before\nvar manager = new ModuleManager(initializer, catalog); // initializer null in tests\n// after\nvar initializer = Substitute.For<IModuleInitializer>();\nvar manager = new ModuleManager(initializer, new ModuleCatalog());","handlingStrategy":"validation","validationCode":"if (initializer is null)\n    throw new InvalidOperationException(\"IModuleInitializer is not registered — ensure UsePrism/Prism container setup ran\");\nvar manager = new ModuleManager(initializer, moduleCatalog);","typeGuard":"bool CanBuildModuleManager(IModuleInitializer init, IModuleCatalog catalog) => init is not null && catalog is not null;","tryCatchPattern":"try\n{\n    var manager = new ModuleManager(initializer, catalog);\n}\ncatch (ArgumentNullException ex)\n{\n    logger.LogError(ex, \"ModuleManager construction failed: {Param} missing — check DI registrations\", ex.ParamName);\n    throw;\n}","preventionTips":["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"],"tags":["null-argument","dependency-injection","modularity","prism"],"backgroundTag":"null-argument","analyzedSha":"358118cd640d9a22ff8cf21c8ad197fa038b7990","analyzedAt":"2026-09-15T15:00:31.079Z","contentChangedAt":"2026-09-15T15:00:31.079Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}