私は現在、MVCアプリケーションをPHPで構築しています(フレームワークを使用していません)。私は依存性注入のためにyadif(https://github.com/beberlei/yadif)を使用しています。アダプターと依存性注入
私はログインモジュールを作りたいと思います。アダプタを使用できるはずです。たとえば、MySqlデータベースまたはLDAPディレクトリを使用してログインが認証されるように設定することができます。この設定は管理領域で行われ、データベースに保存されます。
私は抽象アダプタ持っているだろうと想像:私は、ちょうどそうのようなアダプタを実装し
<?php
abstract AbstractLoginAdapter{
abstract function login($username, $pass){}
}
を:
<?php
MySQLLoginAdapter extends AbstractLoginAdapter{
public function login($username, $pass){
//do stuff
}
}
すべてうまくいいとですが、どのように私はインスタンスを作成しないことにアダプターの?通常、依存関係は、コンストラクタを介してyadif用いて注入することになります。
<?php
class loginController{
private $_adapter;
public function __construct(AbstractLoginAdapter $adapter){
$this->_adapter = $adapter;
}
}
私は具体的なアダプタが注入されるかわからないので、私は手の前に設定してそれを設定することはできません。 DIコンテナがそこに作成され、アプリケーションはフロントコントローラを使用しているため
$builder = new Yadif_Builder();
$builder->bind("loginController")
->to("loginController")
->args($SelectedLoginAdapter);
:Yadifは、私はその後、コンテナに渡す必要がある構成を作成することができます。その後、私はダウンloginControllerオブジェクトにそのコンテナの参照を渡し、その後、私のアダプタをインスタンス化するために、そのコンテナを使用する必要があるなど、このの光で
ルーティングオブジェクトを作成しますか?
または、loginControllerオブジェクト内に新しいコンテナをインスタンス化してから、アダプタのインスタンスにロードするだけですか?
ありがとうございました。私はContainerAwareに似た抽象クラスを作成しましたが、これは他のクラスで拡張できます。コンテナ自体は、実行時にそのクラスに自動的に注入されます。これははるかにきれいであるようです。 – F21