Compare commits

..

2 Commits

Author SHA1 Message Date
Sergey Penkovsky
72e1e91b96 docs: sync references after ProviderFactory rename 2026-03-24 10:54:01 +03:00
Sergey Penkovsky
e67ebbe2ab rename Provider typedef to ProviderFactory 2026-03-24 10:40:49 +03:00
9 changed files with 22 additions and 22 deletions

View File

@@ -1,3 +1,7 @@
## Unreleased
- **BREAKING** **REFACTOR**(binding): rename `Provider<T>` typedef to `ProviderFactory<T>` to avoid naming conflicts with `package:provider`.
## 3.0.2
- **FIX**(test): fix warning.
@@ -188,4 +192,4 @@
- **MAINT**: Updated pubspec.
## 0.1.0
- **INIT**: Initial release.
- **INIT**: Initial release.

View File

@@ -205,7 +205,7 @@ class Binding<T> {
/// bind<Api>().toProvide(() => ApiService());
/// bind<Db>().toProvide(() async => await openDb());
/// ```
Binding<T> toProvide(Provider<T> value) {
Binding<T> toProvide(ProviderFactory<T> value) {
_resolver = ProviderResolver<T>((_) => value.call(), withParams: false);
return this;
}
@@ -227,7 +227,7 @@ class Binding<T> {
}
@Deprecated('Use toProvide instead of toProvideAsync')
Binding<T> toProvideAsync(Provider<T> value) {
Binding<T> toProvideAsync(ProviderFactory<T> value) {
return toProvide(value);
}

View File

@@ -28,10 +28,10 @@ typedef Instance<T> = FutureOr<T>;
///
/// Example:
/// ```dart
/// Provider<MyService> provider = () => MyService();
/// Provider<Api> asyncProvider = () async => await Api.connect();
/// ProviderFactory<MyService> provider = () => MyService();
/// ProviderFactory<Api> asyncProvider = () async => await Api.connect();
/// ```
typedef Provider<T> = FutureOr<T> Function();
typedef ProviderFactory<T> = FutureOr<T> Function();
/// Provider function type that accepts a dynamic parameter, for factory/parametrized injection.
/// Returns [T] or [Future<T>].

View File

@@ -550,4 +550,4 @@ void main() {
- [cherrypick](https://pub.dev/packages/cherrypick)
- [cherrypick_annotations](https://pub.dev/packages/cherrypick_annotations)
- [cherrypick_generator](https://pub.dev/packages/cherrypick_generator)
- [Исходники на GitHub](https://github.com/pese-git/cherrypick)
- [Исходники на GitHub](https://github.com/pese-git/cherrypick)

View File

@@ -255,4 +255,4 @@ class ApiClientImpl implements ApiClient {
return 'Network data';
}
}
```
```

View File

@@ -64,14 +64,10 @@
- **WHEN** метод помечен одновременно `@instance` и `@provide`
- **THEN** генератор завершает сборку с ошибкой валидации
#### Scenario: Требования к @named на provider-методе
- **WHEN** `@named` на provider-методе использует пустую строку или некорректный идентификатор
#### Scenario: Требования к @named
- **WHEN** `@named` использует пустую строку или некорректный идентификатор
- **THEN** генератор завершает сборку с ошибкой валидации
#### Scenario: Пустой @named на inject-поле
- **WHEN** `@named('')` указан на поле с `@inject`
- **THEN** генератор трактует поле как безымянный резолв (без параметра `named`)
#### Scenario: Валидность @module
- **WHEN** класс с `@module` не имеет публичных методов
- **THEN** генератор завершает сборку с ошибкой валидации

View File

@@ -23,11 +23,11 @@
- **THEN** subscope удаляется из дерева, а связанные ресурсы освобождаются
#### Scenario: Путь scope и разделитель
- **WHEN** вызывается `CherryPick.openScope(scopeName: ..., separator: ...)` с иерархическим путем
- **WHEN** scope открывается по иерархическому пути с разделителем
- **THEN** создается цепочка subscopes по каждому сегменту пути
#### Scenario: Пустой scopeName
- **WHEN** вызывается `CherryPick.openScope(scopeName: '')`
- **WHEN** scope открывается с пустым именем
- **THEN** возвращается root scope
### Requirement: Установка и удаление модулей
@@ -81,8 +81,8 @@
### Requirement: Ошибки несоответствия sync/async
Резолв MUST выбрасывать ошибки при несоответствии sync/async режима.
#### Scenario: Синхронный резолв для asyncbinding
- **WHEN** binding зарегистрирован как asyncинстанс или asyncprovider, а вызывается `resolve<T>()` или `tryResolve<T>()`
#### Scenario: ResolveSync для asyncинстанса
- **WHEN** binding зарегистрирован как asyncинстанс или asyncprovider, а вызывается `resolveSync`
- **THEN** выбрасывается ошибка с указанием использовать asyncрезолв
### Requirement: Управление Disposable
@@ -111,7 +111,7 @@
- **THEN** observer получает соответствующие уведомления
### Requirement: Ошибки и сообщения об ошибках
При критических сбоях резолва ядро MUST выбрасывать ошибку с понятным сообщением. Для отсутствующей зависимости `tryResolve`/`tryResolveAsync` MUST возвращать `null` без исключения; ошибки выполнения резолва (например, цикл, sync/async mismatch, отсутствие обязательных params) MAY быть проброшены.
При критических сбоях резолва ядро MUST выбрасывать ошибку с понятным сообщением, а для tryResolve MUST не бросать исключения.
#### Scenario: Ошибка отсутствующей зависимости
- **WHEN** вызывается `resolve<T>()` для незарегистрированной зависимости

View File

@@ -41,14 +41,14 @@ Flutterинтеграция MUST предоставлять `CherryPickProvid
#### Scenario: Ошибка lookup
- **WHEN** вызов происходит вне поддерева провайдера
- **THEN** в debugрежиме происходит assertionошибка
- **THEN** происходит assertionошибка
### Requirement: Ошибки и сообщения
При отсутствии провайдера в дереве MUST быть диагностируемая ошибка.
#### Scenario: Диагностика отсутствия провайдера
- **WHEN** `CherryPickProvider.of(context)` не находит провайдер
- **THEN** в debugрежиме сообщение assertion указывает на отсутствие провайдера
- **THEN** сообщение об ошибке указывает на отсутствие провайдера
### Requirement: Точки расширения
Flutterинтеграция MUST позволять использовать собственные DIscope стратегии поверх `CherryPickProvider`.

View File

@@ -38,4 +38,4 @@ See [Installation](installation.md) for instructions on adding CherryPick to you
CherryPick is open-source. Contributions and questions are welcome!
---
---