100 lines
5.5 KiB
Markdown
100 lines
5.5 KiB
Markdown
# 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
|