stride3d/stride · error · ArgumentNullException

Value cannot be null. (Parameter 'uiElementType')

Error message

Value cannot be null. (Parameter 'uiElementType')

What it means

Argument-null validation in RendererManager.RegisterRendererFactory: the uiElementType parameter is null. The method maps a UIElement-derived type to a renderer factory; a null type key cannot be registered or later matched during renderer lookup, so the call is rejected with ArgumentNullException named 'uiElementType'.

Solutions

  1. Pass a non-null Type derived from UIElement as the uiElementType argument to RegisterRendererFactory.
  2. At the call site, check the type variable for null (e.g. after reflection lookups like Assembly.GetType) before calling RegisterRendererFactory.
  3. If the type is resolved dynamically, fail fast with a clear log message instead of passing null into the registration API.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at sources/engine/Stride.UI/Renderers/RendererManager.cs:64 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of stride3d/stride@96fad776d2 (2026-09-14). Data as JSON: /api/errors/3d34b5047d4e896b. Report an issue: GitHub.

Appendix: source

Thrown at sources/engine/Stride.UI/Renderers/RendererManager.cs:64

                }

                // try to get the renderer from the default renderer factory.
                if (elementRenderer == null && defaultFactory != null)
                    elementRenderer = defaultFactory.TryCreateRenderer(element);

                if (elementRenderer == null)
                    throw new InvalidOperationException($"No renderer found for element {element}");

                // cache the renderer for future uses.
                elementIdToRenderer[element.Id] = elementRenderer;
            }

            return elementRenderer;
        }

        public void RegisterRendererFactory(Type uiElementType, IElementRendererFactory factory)
        {
            if (uiElementType == null) throw new ArgumentNullException(nameof(uiElementType));
            if (factory == null) throw new ArgumentNullException(nameof(factory));

            if (!typeof(UIElement).GetTypeInfo().IsAssignableFrom(uiElementType.GetTypeInfo()))
                throw new InvalidOperationException(uiElementType + " is not a descendant of UIElement.");

            typesToUserFactories[uiElementType] = factory;
        }

        public void RegisterRenderer(UIElement element, ElementRenderer renderer)
        {
            if (element == null) throw new ArgumentNullException(nameof(element));
            if (renderer == null) throw new ArgumentNullException(nameof(renderer));

            elementIdToRenderer[element.Id] = renderer;
        }

        public void Dispose()
        {

View on GitHub (pinned to 96fad776d2)