mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-24 13:47:24 +00:00
- Added full Russian translations for all main documentation sections () into . - Sections translated include: key features, installation, getting started, all core concepts, advanced features, API reference, FAQ, links, additional modules, contributing, and license. - Updated to ensure language switching is available and Russian locale is active. - Each Russian file preserves the structure and formatting of the original Markdown, with machine-aided draft translation for immediate use. - Lays the groundwork for UI language switching (en/ru) and enables further manual translation refinement and review.
103 lines
4.6 KiB
Markdown
103 lines
4.6 KiB
Markdown
---
|
||
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)
|