依存性注入の場合、メインクラスが独自のインスタンスを作成するのではなく、1つのクラスのインスタンスをメインインスタンスに渡す必要があることを理解しています(php):
class Class_One {
protected $_other;
public function setOtherClass( An_Interface $other_class ) {
$this->_other_class = $other_class;
}
public function doWhateverYouHaveToDoWithTheOtherClass() {
$this->_other_class->doYourThing();
}
}
interface An_Interface {
public function doYourThing();
}
class Class_Two implements An_Interface {
public function doYourThing() { }
}
class Class_Three implements An_Interface {
public function doYourThing() { }
}
// Implementation:
$class_one = new Class_One();
$class_two = new Class_Two();
$class_three = new Class_Three();
$class_one->setOtherClass( $class_two );
$class_one->doWhateverYouHaveToDoWithTheOtherClass();
$class_one->setOtherClass( $class_three );
$class_one->doWhateverYouHaveToDoWithTheOtherClass();
これはすべて問題ありません。Class_TwoとClass_ThreeはどちらもAn_Interfaceを実装しているため、Class_Oneでは同じように使用できることを私は知っています。Class_Oneはそれらの違いを知りません。
私の質問は、インスタンスをsetOtherClassに渡す代わりに、「Class_Two」などの文字列を渡し、Class_OneのsetOtherClassメソッドに実際に次のようにインスタンス自体を作成させることをお勧めします。
class Class_One {
...
public function setOtherClass( $other_class_name ) {
$this->_other_class = new $other_class_name();
}
...
}
この種の依存性注入の目的は無効になりますか、それとも完全に有効ですか?このタイプのセットアップは、ユーザーが以前に文字列で使用するクラスを指定でき、後でこれをClass_Oneに渡すことができる構成に役立つと思いました。
実際、これを書き出すことはおそらく良い解決策ではないと私に思わせましたが、誰かが私がこれをすべき/すべきでない理由についていくつかの良いフィードバックを私に与えることができる場合に備えて、私はまだこれを投稿します。
ありがとう=)
ライアン