100 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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