mirror of
https://github.com/pese-git/cherrypick.git
synced 2026-01-25 05:59:55 +00:00
docs+feat: add Disposable interface source and usage example
feat(core,doc): unified async dispose mechanism for resource cleanup BREAKING CHANGE: - Added full support for asynchronous resource cleanup via a unified FutureOr<void> dispose() method in the Disposable interface. - The Scope now provides only Future<void> dispose() for disposing all tracked resources and child scopes (sync-only dispose() was removed). - All calls to cleanup in code and tests (scope itself, subscopes, and custom modules) now require await ...dispose(). - Documentation and all examples updated: resource management is always async and must be awaited; Disposable implementers may use both sync and async cleanup. - Old-style, synchronous cleanup methods have been completely removed (API is now consistently async for all DI lifecycle management). - Example and tutorial code now demonstrate async resource disposal patterns.
This commit is contained in:
40
cherrypick/example/disposable_example.dart
Normal file
40
cherrypick/example/disposable_example.dart
Normal file
@@ -0,0 +1,40 @@
|
||||
import 'package:cherrypick/cherrypick.dart';
|
||||
|
||||
/// Ваш сервис с освобождением ресурсов
|
||||
class MyService implements Disposable {
|
||||
bool wasDisposed = false;
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// Например: закрыть соединение, остановить таймер, освободить память
|
||||
wasDisposed = true;
|
||||
print('MyService disposed!');
|
||||
}
|
||||
|
||||
void doSomething() => print('Doing something...');
|
||||
}
|
||||
|
||||
void main() {
|
||||
final scope = CherryPick.openRootScope();
|
||||
|
||||
// Регистрируем биндинг (singleton для примера)
|
||||
scope.installModules([
|
||||
ModuleImpl(),
|
||||
]);
|
||||
|
||||
// Получаем зависимость
|
||||
final service = scope.resolve<MyService>();
|
||||
service.doSomething(); // «Doing something...»
|
||||
|
||||
// Освобождаем все ресурсы
|
||||
scope.dispose();
|
||||
print('Service wasDisposed = ${service.wasDisposed}'); // true
|
||||
}
|
||||
|
||||
/// Пример модуля CherryPick
|
||||
class ModuleImpl extends Module {
|
||||
@override
|
||||
void builder(Scope scope) {
|
||||
bind<MyService>().toProvide(() => MyService()).singleton();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user