Чистый DI для Unity.
Лёгкий, быстрый и предсказуемый фреймворк инъекции зависимостей для Unity, написанный поверх Reflex.
Что такое Zenjex?
Zenjex — это фреймворк инъекции зависимостей для Unity, построенный поверх высокопроизводительного контейнера Reflex. Он предоставляет привычный Zenject-подобный API с fluent-стилем привязок, автоматическим разрешением зависимостей и встроенной поддержкой сцен Unity.
Маркер [Zenjex] автоматически заполняет поля MonoBehaviour во время инициализации — до вызова Awake(). SceneInstaller и ZenjexBehaviour позволяют аккуратно организовать зависимости между загрузочной и аддитивными сценами, а ZenjexRunner управляет несколькими проходами инъекции, гарантируя корректный порядок выполнения.
public class PlayerController : MonoBehaviour
{
[Zenjex] private IInputService _input;
[Zenjex] private IPhysicsService _physics;
private void Awake()
{
// Поля уже заполнены ✓
_input.OnMove += _physics.Move;
}
}
Ключевые возможности
Инъекция до Awake()
Pass 1 запускается при порядке -280 — раньше любого MonoBehaviour в сцене. Поля всегда заполнены к моменту вашего кода.
Поддержка аддитивных сцен
Отдельный SceneInstaller для каждой сцены. Автоматический Pass 3 через SceneManager.sceneLoaded с предупреждением ZNX-LATE при необходимости.
Fluent Binding API
Знакомый Zenject-подобный синтаксис: Bind<T>().To<TConcrete>().AsSingle() — с поддержкой Transient, Scoped и NonLazy.
Построен на Reflex
Использует высокопроизводительный контейнер Reflex под капотом, добавляя к нему удобный API и полноценную интеграцию с жизненным циклом Unity.
Диагностика и логи
Предупреждения ZNX-LATE, InjectedRecords для трекинга, защита от двойного Awake() — всё для прозрачной отладки в редакторе.
.unitypackage
Поставляется как .unitypackage — просто дважды кликните и импортируйте. Никакого сложного package manager, никаких лишних зависимостей.