DIコンテナは本当に必要なところに使えばいいのでは?

ちょっと前からDIコンテナの必要性について考えているのだけど、
結論としては「DIコンテナは必要なところに使えばいい」と思う。


必要なところの例は、DBコネクション周りの設定ファイルを
本番環境と開発環境で変わる場合。


DBの接続先が変わる(または変える予定がある)場合は、
そこはDIや設定ファイルとして外部で制御できるようにすべき。


ただ、こういう環境の差異の吸収目的以外の使用でDIが絶対に必要になる
という箇所はあまり思いつかない。


テスティングしやすくするためにDIコンテナ使うのだったら、
TDDで書いてテスティングの時だけDIコンテナ使えばいいのでは?と思う。


で、自分なりに考えたSlim3にDIコンテナが無い理由なんだけど、
App Engineの場合、DIが必要になりそうな「本番と開発環境の差異」を
Googleが提供しているもので吸収することができるから。


Slim3だとAppEngineUtil.isDevelopmentとisProductionで
開発環境と本番環境の切り分けが可能だし、DBの設定の切り分けも
勝手にやってくれるので問題ない。


この論理をWebアプリケーションにも適用するのであれば、自作ライブラリで
開発環境と本番環境の切り分けができるUtilityを用意して、
設定ファイルとして外部に持つものをDIすればいいのではと思うのです。