Mathijs-Bakker / Extenject

Dependency Injection Framework for Unity Game Engine
MIT License
531 stars 97 forks source link

Throwing a null reference exception during an "Install" method call with a UI Document on scene #67

Open naxa1ka opened 1 year ago

naxa1ka commented 1 year ago

Describe the bug Right at the start of the scene, an exception is thrown while calling the install method in the scene context:

ArgumentNullException: Value cannot be null.
Parameter name: e
at UnityEngine.UIElements.UQueryExtensions.Query (UnityEngine.UIElements.VisualElement e) 

Line 305 in the SceneContext script.

To Reproduce Add a UI Document to the scene Add some Installer and scene context Run the scene in WebGL

Repository example Repository with a ready-made example: https://github.com/naxa1ka/Zenject_Toolkit_Issue_Example The readme in repository contains all the details of the environment

Expected behavior Exception will not be thrown If the idea of the lines that caused the bug was to inject dependencies into the ui document

Screenshots image

Extenject and Unity info (please complete the following information):

Additional context Exception thrown at rootVisualElement.Query() My guess is that the problem is that the UI Document has [DefaultExecutionOrder(-100)], due to which the rootVisualElement is not yet ready to run during the Install method

Error code

SceneContext.cs
297 #if USE_UI_ELEMENTS_PACKAGE || (USE_UI_ELEMENTS_MODULE && UNITY_2021_1_OR_NEWER)
298           List<GameObject> rootObjectsInScene = new List<GameObject>();
299        gameObject.scene.GetRootGameObjects(rootObjectsInScene);
300           for (int i = 0; i < rootObjectsInScene.Count; i++)
301            {
302                UIDocument[] uiDocuments = rootObjectsInScene[i].GetComponentsInChildren<UIDocument>(true);
303               for (int j = 0; j < uiDocuments.Length; j++)
304               {
305                   uiDocuments[j].rootVisualElement.Query().ForEach(x => _container.QueueForInject(x));
306               }
307           }
308 #endif
denravonska commented 1 year ago

Duplicate of #55 ?