knife_generator 1.0.0
knife_generator: ^1.0.0 copied to clipboard
Code generator for the Knife compile-time dependency injection library.
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 не поддерживается