{"record":{"id":"ec6183951cc44336","repo":"stride3d/stride","slug":"value-cannot-be-null-parameter-factory","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'factory')","messagePattern":"Value cannot be null\\. \\(Parameter 'factory'\\)","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"sources/engine/Stride.UI/Renderers/RendererManager.cs","lineNumber":65,"sourceCode":"\n                // try to get the renderer from the default renderer factory.\n                if (elementRenderer == null && defaultFactory != null)\n                    elementRenderer = defaultFactory.TryCreateRenderer(element);\n\n                if (elementRenderer == null)\n                    throw new InvalidOperationException($\"No renderer found for element {element}\");\n\n                // cache the renderer for future uses.\n                elementIdToRenderer[element.Id] = elementRenderer;\n            }\n\n            return elementRenderer;\n        }\n\n        public void RegisterRendererFactory(Type uiElementType, IElementRendererFactory factory)\n        {\n            if (uiElementType == null) throw new ArgumentNullException(nameof(uiElementType));\n            if (factory == null) throw new ArgumentNullException(nameof(factory));\n\n            if (!typeof(UIElement).GetTypeInfo().IsAssignableFrom(uiElementType.GetTypeInfo()))\n                throw new InvalidOperationException(uiElementType + \" is not a descendant of UIElement.\");\n\n            typesToUserFactories[uiElementType] = factory;\n        }\n\n        public void RegisterRenderer(UIElement element, ElementRenderer renderer)\n        {\n            if (element == null) throw new ArgumentNullException(nameof(element));\n            if (renderer == null) throw new ArgumentNullException(nameof(renderer));\n\n            elementIdToRenderer[element.Id] = renderer;\n        }\n\n        public void Dispose()\n        {\n            foreach (var renderer in elementIdToRenderer.Values)","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/engine/Stride.UI/Renderers/RendererManager.cs#L47-L83","documentation":"Argument-null validation in RendererManager.RegisterRendererFactory: the factory parameter is null. Registering a null factory would leave the type mapped to nothing and cause a null renderer during GetRenderer, so the registration is rejected with ArgumentNullException named 'factory'.","triggerScenarios":"Thrown at sources/engine/Stride.UI/Renderers/RendererManager.cs:65 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass a non-null IElementRendererFactory instance as the factory argument to RegisterRendererFactory.","Construct or obtain the factory before registering it; if factory creation can fail, do not call RegisterRendererFactory at all.","Guard the call site: skip or log when the factory reference is null instead of passing null into the registration API."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}