Skip to content

Ошибки

InferDI бросает явные ошибки при неправильном использовании графа и жизненного цикла. Оставляйте эти сообщения видимыми в тестах, чтобы ошибки регистрации падали рано.

Что произошлоФорма сообщения
.get(k) для отсутствующего ключаKey "k" not found
Resolve уже очищенного контейнераContainer is disposed (key: "k")
Resolve через очищенного предкаAncestor container is disposed (key: "k")
createScope() после disposeCannot create scope from a disposed container
Нарушение времени жизни singletonSingleton "x" cannot depend on scoped "y"...
Синхронный циклCircular dependency detected: a -> b -> a...
Синхронный dispose для async-ресурсаSync [Symbol.dispose] called on a resource whose .dispose() returned a Promise...
Поздний overrideCannot override "k" because it has already been resolved...
Override на очищенном контейнереCannot override on a disposed container (key: "k")

Циклы async-фабрик

Циклы между async-фабриками не детектируются. Фабрика, которая ждёт другую async-фабрику, может продолжиться уже после очистки синхронного стека resolve. Если обе стороны ждут друг друга, вызывающий код получает pending promise, который никогда не завершится.

Исправляйте async-циклы архитектурно:

  • разделите общую инициализацию
  • поднимите одну сторону в более ранний сервис
  • используйте Lazy<singleton> только если обе стороны singleton
  • добавьте development-timeout вокруг подозрительных top-level awaits

Ошибки очистки в адаптерах

Ошибки очистки в адаптере после уже созданного ответа никогда не показываются клиенту. Они уходят в onDisposeError или fallback-приёмник адаптера.

Ошибки setup отличаются: наружу выходит только исходная ошибка setup, а сбой очистки во время setup teardown уходит в приёмник ошибок и не добавляется к проброшенной ошибке.