Чистый DI для Unity.

Лёгкий, быстрый и предсказуемый фреймворк инъекции зависимостей для Unity, написанный поверх Reflex.

Документация

Что такое Zenjex?

Zenjex — это фреймворк инъекции зависимостей для Unity, построенный поверх высокопроизводительного контейнера Reflex. Он предоставляет привычный Zenject-подобный API с fluent-стилем привязок, автоматическим разрешением зависимостей и встроенной поддержкой сцен Unity.

Маркер [Zenjex] автоматически заполняет поля MonoBehaviour во время инициализации — до вызова Awake(). SceneInstaller и ZenjexBehaviour позволяют аккуратно организовать зависимости между загрузочной и аддитивными сценами, а ZenjexRunner управляет несколькими проходами инъекции, гарантируя корректный порядок выполнения.

C#
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, никаких лишних зависимостей.