特定のクラスがセッターインジェクションに必要なインターフェイスの実装を指定するにはどうすればよいですか?たとえば、コンストラクターインジェクション用に機能していますが、セッター用には機能していません。
class Lister1 {
public $finder;
public function setFinder(Finder $finder){
$this->finder = $finder;
}
}
interface Finder {
public function findAllByName($name);
}
class FinderImpl1 implements Finder {
public function findAllByName($name) {}
}
上記の場合、次のコードが機能します。
$di = new Di();
$di->instanceManager()->addTypePreference(
'Finder',
'FinderImpl1'
);
$lister = $di->get('Lister1');
しかし、私が次のものも持っている場合はどうなりますか
class Lister2 extends Lister1{
}
class FinderImpl2 implements Finder {
public function findAllByName($name) {//assume a different impl}
}
したがって、Lister1にはFinderImpl1を注入する必要があり、Lister2にはFinderImpl2を注入する必要があります。
クラスごとにタイプ設定を追加できますか?
zf2に同梱されている単体テストを見てみましたが、何も飛び出しませんでした。