TypeScript-библиотека · v2.0.0

@zirion/ioc

Легковесный IoC-контейнер без внешних зависимостей для Node.js с внедрением через конструктор, ленивым разрешением и singleton/request scope.

TypeScriptNode.jsIoCвнедрение зависимостей

@zirion/ioc — компактный Inversion of Control контейнер для приложений на Node.js. Он делает управление зависимостями явным и не добавляет в проект собственных runtime-зависимостей.

Возможности

  • Внедрение классов и зарегистрированных значений через конструктор.
  • Singleton и request-scoped жизненные циклы провайдеров.
  • Контексты для зависимостей в рамках запроса.
  • Ленивое разрешение зависимостей.
  • Fluent API для настройки контейнера и отсутствие внешних зависимостей.

Установка

npm install @zirion/ioc

Продолжите с полным руководством по Dependency Injection: scope, асинхронные фабрики, lifecycle hooks, паттерны тестирования, ошибки, миграция и API-справочник.

Пакет распространяется с открытым исходным кодом по лицензии MIT. Актуальный roadmap находится в репозитории.

История версий

2.0.010 марта 2026
  • Разрешение зависимостей стало асинхронным: get() и getOrFail() теперь возвращают promises.
  • Поле провайдера value заменено на поддерживающий асинхронность API valueFactory.
  • Добавлена типизированная композиция контейнера: каждый вызов add() переносит зарегистрированные селекторы в тип результата.
  • Добавлены object selectors и фабрики, возвращающие значения или конструкторы классов.
  • Добавлен настраиваемый logger с консольной реализацией по умолчанию и экспортируемыми интерфейсами.
  • Добавлены lifecycle hook onInitialized и alias build() для finalize().
  • finalize() теперь работает как с зарегистрированными объектами, так и с классами и возвращает собранный контейнер.
1.3.019 ноября 2024
  • Удалён готовый экземпляр контейнера на уровне пакета: теперь пользователь создаёт собственный Container.
  • Улучшен вывод возвращаемых типов для class selectors в get() и getOrFail().
  • Упрощены package exports и удалена точка входа @zirion/ioc/container.
  • Заявлена поддержка Node.js 18+ и добавлены метаданные совместимости с браузерами.
  • Обновлены документация и ключевые слова пакета.
1.2.120 сентября 2024
  • Исправлен поиск lifecycle hook: контейнер теперь корректно вызывает onFinalized().
  • Запуск тестов добавлен в проверки перед публикацией пакета.
  • Обновлены TypeScript, ESLint, Vitest и типы Node.js.
1.2.05 августа 2024
  • Добавлены структурированные ошибки DependencyInjectionError и экспортируемые коды ошибок контейнера.
  • Добавлена валидация отсутствующих и повторных targets, неизвестных selectors/scopes и некорректных resolvers.
  • Добавлены явные ошибки для отсутствующего request context и недопустимого внедрения request scope в singleton.
  • Исправлено кэширование singleton: разрешённый экземпляр теперь переиспользуется.
  • Добавлены читаемые имена selectors, расширенные тесты и отчёты покрытия.
1.1.214 июля 2024
  • Техническая публикация, синхронизирующая версию в метаданных пакета с npm-релизом.
1.1.114 июля 2024
  • Переработаны структура пакета и публичные точки входа.
  • Добавлены отдельные сборки CommonJS, ES modules и деклараций типов.
  • Добавлены документация пакета, примеры использования и руководство для contributors.
  • Добавлена автоматизация обновления зависимостей и обработки неактивных issues.
1.0.014 июля 2024
  • Первая публикация IoC-контейнера в npm.
  • Добавлены регистрация провайдеров и ленивое разрешение зависимостей.
  • Добавлено внедрение через конструктор с singleton и request-scoped жизненными циклами.
  • Добавлены контекстное кэширование request-scoped провайдеров и lifecycle-контракт onFinalized.

Интерактивный пример

Попробовать @zirion/ioc

Измените пример и запустите его локально в браузере. Код никуда не отправляется.

Результат
Готово. Нажмите «Запустить» или ⌘/Ctrl + Enter.