Сцена тестирования Zenject Unity - как перейти к следующей сцене, правильно обновив контейнер до нового SceneContext?

Как переключить сцену во время теста сцены, в классе, расширяющем SceneTestFixture?

Мне нужно создать тестовый пример при расширении SceneTestFixture, где во время теста я загружаю сцену 'A', и она устанавливает условие для ProjectContext, а затем в том же тестовом переключателе на сцену 'B' и заставляет его проверить, установлено ли условие на "А", если не вернуться к "А".

Если я попытаюсь выполнить LoadScene() в соответствии с документацией Zenject, я не смогу повторно использовать ее для перехода к следующей сцене. Добавочная загрузка - это не то, что мне нужно, поэтому не следует использовать LoadScenes(), и если я использую LoadScene() для загрузки 'A', но затем стандартным переключателем Unity SceneManager на другую сцену, то SceneContainer не обновляется до новой сцены и я не знаю, как его обновить. Это пример того, как мой код не работает и поток:

yield return LoadScene("SceneA");
AClass aclass = Container.Resolve...
Assert.IsNotNull(aclass);// and I can access this aclass, but then:
aclass.OnChange_SceneB();// in scene 'A' switch by standard Unity SceneManager
yield return null;
BClass bclass = Container.Resolve...// I expected that Container will auto-update, but...
// error: resolve failed!

Я попал к источнику SceneTestFixture здесь, но я не мог понять, как перезагрузить Контейнер в новый SceneContext?

1 ответ

Решение

Это проблема с классом Zenject SceneTestFixture. Предполагается, что сцена в настоящее время не изменится во время выполнения. Я добавил проблему для этого здесь. Тем временем вы можете получить контекст сцены для текущей сцены, выполнив что-то вроде этого:

yield return LoadScene("FirstScene");

yield return new WaitForSeconds(2.0f);

var newSceneContainer = ProjectContext.Instance.Container.Resolve<SceneContextRegistry>()
    .SceneContexts.Single().Container;

newSceneContainer.Resolve<Foo>();
Другие вопросы по тегам