Files
cherrypick/website/i18n/ru/docusaurus-plugin-content-docs/current/using-annotations.md
Sergey Penkovsky e0a5ae66f6 fix(docs): comment out all broken links to allow successful Docusaurus build
- Commented out references to non-existent files and examples in both English and Russian documentation:
  - circular-dependency-detection.md
  - logging.md
  - documentation-links.md
  - using-annotations.md
- This fix prevents build failures caused by unresolved links in Docusaurus for both locales.
- All offending links are now non-blocking comments, allowing the site to build and deploy successfully until the related pages are added.
2025-08-14 16:24:57 +03:00

105 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
sidebar_position: 5
---
# Использование аннотаций и генерация кода
CherryPick предоставляет продвинутую эргономику и безопасный DI благодаря **аннотациям Dart** и генерации кода. Это позволяет избавить вас от рутины — просто аннотируйте классы, поля и модули, запускайте генератор и используйте полностью автосвязанный DI!
## Как это работает
1. **Аннотируйте** сервисы, провайдеры и поля с помощью `cherrypick_annotations`.
2. **Генерируйте** код с помощью `cherrypick_generator` и `build_runner`.
3. **Используйте** автосгенерированные модули и миксины для автоматического внедрения.
---
## Поддерживаемые аннотации
| Аннотация | Target | Описание |
|---------------------|---------------|--------------------------------------------------------------|
| `@injectable()` | класс | Включает автоподстановку полей (генерируется mixin) |
| `@inject()` | поле | Автоподстановка через DI (работает с @injectable) |
| `@module()` | класс | DI-модуль: методы — провайдеры и сервисы |
| `@provide` | метод | Регистрирует как DI-провайдер (можно с параметрами) |
| `@instance` | метод/класс | Регистрирует новый экземпляр (на каждый resolve, factory) |
| `@singleton` | метод/класс | Регистрация как синглтон (один экземпляр на скоуп) |
| `@named` | поле/параметр | Использование именованных экземпляров для внедрения/resolve |
| `@scope` | поле/параметр | Внедрение/resolve из другого (именованного) скоупа |
| `@params` | параметр | Добавляет user-defined параметры во время resolve |
---
## Пример Field Injection
```dart
import 'package:cherrypick_annotations/cherrypick_annotations.dart';
@injectable()
class ProfilePage with _\$ProfilePage {
@inject()
late final AuthService auth;
@inject()
@scope('profile')
late final ProfileManager manager;
@inject()
@named('admin')
late final UserService adminUserService;
}
```
- После запуска build_runner миксин `_ProfilePage` будет сгенерирован для внедрения.
- Вызовите `myProfilePage.injectFields();` чтобы все зависимости были внедрены автоматически.
## Пример модуля/провайдера
```dart
@module()
abstract class AppModule {
@singleton
AuthService provideAuth(Api api) => AuthService(api);
@named('logging')
@provide
Future<Logger> provideLogger(@params Map<String, dynamic> args) async => ...;
}
```
---
## Шаги использования
1. Добавьте зависимости в `pubspec.yaml`.
2. Аннотируйте классы и модули.
3. Генерируйте код командой build_runner.
4. Регистрируйте модули и используйте автосвязь.
---
## Расширенные возможности
- Используйте `@named` для внедрения по ключу.
- Используйте `@scope` для внедрения из разных скоупов.
- Используйте `@params` для передачи runtime-параметров.
---
## Советы и FAQ
- После изменений в DI-коде запускайте build_runner заново.
- Не редактируйте `.g.dart` вручную.
- Ошибки некорректных аннотаций определяются автоматически.
---
## Ссылки
<!--
- [Подробнее про аннотации (en)](doc/annotations_en.md)
- [cherrypick_annotations/README.md](../cherrypick_annotations/README.md)
- [cherrypick_generator/README.md](../cherrypick_generator/README.md)
- Полный пример: [`examples/postly`](../examples/postly)
-->