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 не поддерживается