5.5 KiB
Raw Permalink Blame History

Zenject / Extenject

Зачем это нужно

Zenject нужен для dependency injection и более управляемой сборки игровых систем.

Что важно заранее

В roadmap указан Zenject, но в текущей экосистеме нужно различать два источника:

  • оригинальный Zenject
  • форк Extenject, который позиционируется как активно поддерживаемое продолжение с bug fixes и updates

Сравнение официальных источников и NuGet

На момент проверки:

  • официальный Zenject имеет stable release 9.2.0
  • официальный Extenject имеет stable release 9.2.1
  • у Extenject есть более новые pre-release ветки 9.3.0 и 9.3.1, где отдельно фигурирует UPM Support

Практический вывод:

  • стабильный канал у Extenject сейчас все еще завязан не на полноценный зрелый NuGet/UPM workflow, а на официальный unity-ориентированный дистрибутив
  • для Zenject/Extenject не стоит делать NuGet for Unity основным способом установки в этом проекте

Если команде нужен максимально консервативный вариант, безопаснее ориентироваться на Extenject 9.2.1.

Если команде нужен именно package-manager workflow, можно рассматривать Extenject с UPM Support, но только как осознанный переход на pre-release канал.

Рекомендуемое решение для проекта

Для нового production-сценария внутри этого проекта предпочтительно выбрать один из двух режимов:

  1. Extenject 9.2.1 как стабильную базу
  2. Extenject 9.3.x только если команда осознанно принимает pre-release UPM-канал

По умолчанию безопаснее использовать именно Extenject, а не оригинальный Zenject.

Как установить

Вариант 1. Предпочтительный стабильный

Используй официальный release Extenject 9.2.1 и импортируй unitypackage из releases.

Этот вариант лучше, если важнее предсказуемость, чем package-manager workflow.

Вариант 2. Если нужен именно UPM workflow

Только для команды, готовой принять pre-release:

  1. Открой Window > Package Manager.
  2. Нажми +.
  3. Выбери Add package from git URL....
  4. Вставь git URL из актуального UPM-совместимого pre-release Extenject.
  5. Зафиксируй выбранную версию внутри команды и не оставляй зависимость на плавающей ветке.

Если нужен именно оригинальный Zenject

Тогда бери его из modesttree/Zenject Releases и импортируй Zenject.vX.X.unitypackage.

Почему не через NuGet for Unity

Для этого пакета NuGet for Unity не должен быть основным каналом, потому что:

  • пакет исторически распространяется как Unity-ориентированный framework
  • актуальные рекомендации вращаются вокруг releases и Unity-специфичных способов импорта
  • UPM-поддержка у Extenject выглядит как отдельная новая ветка, а не как устоявшийся NuGet workflow

Как настроить после установки

Минимальная настройка для проверки:

  1. Создай тестовую сцену или используй отдельную sandbox-сцену.
  2. Проверь, что можешь добавить SceneContext.
  3. Проверь, что доступны элементы меню Zenject.

Минимальная практическая настройка для проекта

На первом этапе не нужно сразу переводить весь проект на DI.

Достаточно:

  • установить пакет через выбранный официальный канал
  • убедиться, что SceneContext и installers доступны
  • договориться, что новые runtime-системы позже будут подключаться через installers, а не через случайные singleton-зависимости

Как проверить, что всё настроено

  • пакет импортировался без compile errors
  • доступны SceneContext и Installers
  • тестовая сцена с SceneContext открывается и не падает

Официальные источники