Skip to content

エラー

InferDI は、依存グラフやライフサイクルの誤用に対して明示的なエラーをスローします。登録ミスを早期に失敗させるため、これらのメッセージをテストで可視のまま保ちましょう。

トリガーメッセージの形
存在しないキーに対する .get(k)Key "k" not found
破棄されたコンテナでの解決Container is disposed (key: "k")
破棄された祖先コンテナでの解決Ancestor container is disposed (key: "k")
破棄後の createScope()Cannot create scope from a disposed container
シングルトンのライフタイム違反Singleton "x" cannot depend on scoped "y"...
同期的な循環Circular dependency detected: a -> b -> a...
非同期リソースに対する同期破棄Sync [Symbol.dispose] called on a resource whose .dispose() returned a Promise...
遅延したオーバーライドCannot override "k" because it has already been resolved...
破棄されたコンテナでのオーバーライドCannot override on a disposed container (key: "k")

非同期ファクトリーの循環

非同期ファクトリー間の循環は検出されません。別の非同期ファクトリーを await するファクトリーは、同期的な循環スタックがクリアされた後に再開される可能性があります。両側が最終的に互いを await すると、呼び出し側は決して解決されない保留中の promise を観測します。

非同期の循環はアーキテクチャ上で修正してください。

  • 共有の初期化処理を分割する
  • 一方をより早いサービスへと引き上げる
  • 両側がシングルトンの場合に限り Lazy<singleton> を使う
  • 疑わしいトップレベルの await の周りに開発用のウォッチドッグタイムアウトを追加する

アダプターのクリーンアップエラー

レスポンスが生成された後のアダプターのクリーンアップエラーが、クライアントに表面化することは決してありません。これらは onDisposeError またはアダプターのフォールバックのシンクにルーティングされます。

セットアップの失敗は異なります。元のセットアップエラーが表面化し、セットアップのクリーンアップ中に発生したクリーンアップの失敗は、表面化されるエラーに集約されることなくシンクにルーティングされます。