2012年10月10日水曜日

Interfaceを使ったDIの問題点

PHPのインターフェースを使って、簡単に依存注入するコードを考えました。
が、これぐらい誰かがすでにやっているはず。

と思って探してたら、見つけた。
Symfony2: Dependency Injection Types – Update

これによると、過去にSymfonyでインターフェースを使ったインジェクションがサポートされていたらしい。で、ここのスレッドでの話し合いの結果、問題があるので機能そのものを削除することになった。

何度も読んだが、今ひとつ理解し切れないのだけど、
おそらく、

  1. インターフェースインジェクションを持つクラスAを継承して別のクラスBを作成、
  2. 別クラスBに対して「自分でインジェクション」を行う、
  3. が、SymfonyのDIコンテナがクラスAとBを混乱、
  4. クラスBに対して再びインジェクション実行
  5. 最初に自分でインジェクトした結果が上書き、

という流れのよう。

ようするに、
インターフェースは継承したクラスにも含まれるので、
依存注入のコントロールが難しい、
ということだと思う。
正直に言えば、同じインターフェースで別の依存性を注入するのが問題な気がするが、できるのだから、できるようにしないといけない。

とにかく、見つけてられて、すっきりした。
インターフェースを使った依存性の注入はやめておこう。

0 件のコメント: