Изучение

Изучение Ark DI

Неизменяемая регистрация, контекстное разрешение, Scope, владение, асинхронная инициализация и упорядоченное завершение.

v1.1.0Начальный уровень

Изучение Ark DI

Ark DI — среда объектного графа на чистом Dart. Она отвечает за композицию, но не за бизнес-логику и не создаёт скрытую глобальную точку доступа.

Начните с задачи

Приложение создаёт объекты в порядке зависимостей: конфигурацию до API-клиента, клиент до Repository, Repository до сервиса или UseCase. Одни объекты разделяются между потребителями, другие создаются на каждый запрос, третьи инициализируются асинхронно. Ресурсы необходимо закрывать в обратном порядке. Тестам и предпросмотрам функций нужны ограниченные подмены без изменения production-графа.

Ark DI фиксирует правила создания и жизненного цикла в неизменяемом контейнере:

text
Корень композиции регистрирует правила создания
        ↓
Resolver создаёт или возвращает зависимость по выбранной стратегии
        ↓
дочерний Scope может явно переопределить часть графа
        ↓
close ждёт активные разрешения и закрывает принадлежащие контейнеру объекты

Прикладные классы по-прежнему используют внедрение через конструкторы. Контейнер остаётся на границах композиции; обычный доменный и прикладной код не обращается к нему.

Выбор регистрации по времени жизни

ЗадачаРегистрация
Уже существующий объект с явным владельцемInstance
Новый краткоживущий объект для каждого запросаFactory
Один объект при первом обращенииLazy Singleton
Новый асинхронный объект для каждого запросаAsync Factory
Один общий асинхронно инициализируемый объектAsync Lazy Singleton

Рекомендуемый порядок

  1. Начало работы — небольшой граф и его закрытие.
  2. Composition Root — место соединения конкретных типов.
  3. Регистрации и владение — способ получения и ответственность за жизненный цикл.
  4. Scope и переопределения — иерархия и разрешение сначала в локальной области.
  5. Асинхронное разрешение — повторные попытки и совместное ожидание одной выполняющейся инициализации.
  6. Жизненный цикл и завершение — активные разрешения и обратный порядок зависимостей.

Интеграция с Flutter образует отдельную ветку на основе ark_di_flutter.

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