Files
cherrypick/website/i18n/ru/docusaurus-plugin-content-docs/current/advanced-features/circular-dependency-detection.md
Sergey Penkovsky 9fee26c524 feat(i18n): add initial Russian localization for documentation and site config
- 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.
2025-08-14 15:46:53 +03:00

2.3 KiB
Raw Blame History

sidebar_position
sidebar_position
3

Обнаружение циклических зависимостей

CherryPick может обнаруживать циклические зависимости в вашей DI-конфигурации, помогая избежать бесконечных циклов и сложных для отладки ошибок.

Как использовать:

1. Включите обнаружение во время разработки

Локально (в рамках одного скоупа):

final scope = CherryPick.openSafeRootScope(); // Локальное обнаружение включено по умолчанию
// или для существующего скоупа:
scope.enableCycleDetection();

Глобально (между скоупами):

CherryPick.enableGlobalCrossScopeCycleDetection();
final rootScope = CherryPick.openGlobalSafeRootScope();

2. Пример ошибки

Если вы объявите взаимозависимые сервисы:

class A { A(B b); }
class B { B(A a); }

scope.installModules([
  Module((bind) {
    bind<A>().to((s) => A(s.resolve<B>()));
    bind<B>().to((s) => B(s.resolve<A>()));
  }),
]);

scope.resolve<A>(); // выбросит CircularDependencyException

3. Общая рекомендация

  • Включайте обнаружение всегда в debug и тестовой среде для максимальной безопасности.
  • Отключайте обнаружение в production после завершения тестирования, ради производительности.
import 'package:flutter/foundation.dart';

void main() {
  if (kDebugMode) {
    CherryPick.enableGlobalCycleDetection();
    CherryPick.enableGlobalCrossScopeCycleDetection();
  }
  runApp(MyApp());
}

4. Отладка и обработка ошибок

При обнаружении будет выброшено исключение CircularDependencyException с цепочкой зависимостей:

try {
  scope.resolve<MyService>();
} on CircularDependencyException catch (e) {
  print('Цепочка зависимостей: ${e.dependencyChain}');
}

Подробнее: смотрите cycle_detection.ru.md