-検索基点

ひがさんのコメントで「ルートから子供のコンテナをたどり...」とありますが、ここに私の考えのポイントがあります。コメントでは測れなかったので、再度確認すると。。。

  • A include B include C, A include D include Eの場合、コンテナの検索はA,B,C,D,E順で先に見つかったものが返される。
  • A include B include C include D (4つのコンテナが直列のパターンです)で、コンテナB内のコンポーネントについては、BCDの順で検索。BからAは見えない。Cの場合はCDの順で検索する。

ポイントは、下方検索のみでやるということです。A include Bの場合、Aは明示的にincludeしているのでBが見えるのは当然ですが、Bから見たときにはAにincludeされているかどうかをBファイル単体では明示的ではないのでBファイルから追える情報だけではインジェクションが決定していないということになります。
現行ではA include B、C include BとしたときにはBにAもしくはCのコンポーネントがインジェクトされます。ユーティリティBの利用時固有パラメータをAやCに置くという作りができていて良いような気もしますが、たいていの場合は副作用による予測しない動きになりがちで、かならずしも有効ではないようです。