# 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` открывается и не падает ## Официальные источники - https://github.com/modesttree/Zenject - https://github.com/modesttree/Zenject/releases - https://github.com/Mathijs-Bakker/Extenject - https://github.com/Mathijs-Bakker/Extenject/releases