knife_generator

Code generator for Knife, библиотеки compile-time dependency injection на Dart.

Этот пакет подключается в dev_dependencies и используется вместе с build_runner. Аннотации лежат в отдельном пакете knife_annotations.

Установка

dependencies:
  knife_annotations: ^1.0.0

dev_dependencies:
  knife_generator: ^1.0.0
  build_runner: ^2.4.9

Как устроена библиотека

Knife описывает DI-граф через два основных понятия: компоненты и модули.

Компонент это корневая точка входа в граф зависимостей. Он перечисляет модули, которые участвуют в сборке, и объявляет методы, через которые можно получить готовые зависимости.

Модуль это описание правил, по которым зависимости попадают в граф. В модуле можно:

  • создать зависимость вручную через @provides
  • связать абстракцию с реализацией через @binds

Если зависимость не создаётся методом модуля, она может быть построена через конструктор, помеченный @inject.

Как запустить генератор

Установить зависимости:

dart pub get

Запустить генерацию:

dart run build_runner build

Если нужно пересобрать файлы с перезаписью конфликтующих outputs:

dart run build_runner build --delete-conflicting-outputs

В результате генератор создаёт:

  • *.component.dart для компонентов
  • *.module.dart для модулей с @binds

Что делает пакет

  • анализирует аннотации из knife_annotations
  • строит граф зависимостей во время генерации
  • генерирует типобезопасные component и module реализации
  • показывает ошибки сборки графа на этапе compile-time

Ограничения

  • Циклические зависимости не поддерживаются
  • Generic-методы в провайдерах не поддерживаются
  • Lazy initialization не поддерживается