0

私はこの小さな依存性注入コンテナを持っています。これは次のようにインスタンス化します。

$services = new Services();

パラメータを追加する必要がある場合は、次のようにします。

$services->setParameter($name, $value);

そして、このインスタンスを$servicesいくつかのオブジェクトのコンストラクターに渡します。データベースハンドルのようなものが必要な$this->services->getService('db');場合は、データベースハンドルのインスタンスを返します。後でそのメソッドを再度呼び出すと、同じインスタンスが返されます。データベースは以前に処理しました。

私が知りたいのは、オブジェクトのような単一インスタンスオブジェクト専用の依存性注入コンテナ$dbh, $config, $user, $authですか?

たとえば、Productsクラスの複数のインスタンスを作成する必要がありますが、次の場合に実行します。

$services->setParameter('product.id', $productId);
$product[] = $services->getService('product');

明らかに新しいインスタンスが作成されますがProduct、そのコードをもう一度繰り返すと、以前と同じインスタンスが返されます。getService()メソッドを少し変更して、必要な数の新しいインスタンスを返すことができますが、それが作られていない何かのためにDICを使用しているということですか?

したがって、基本的に、DICは次のようなクラスの単一インスタンスのみを返す必要があります$dbh, $user etcか??のようなオブジェクトを作成していませんOrders, Products, Invoicesか?

4

2 に答える 2

0

にきびのコードを見てください:

https://github.com/fabpot/Pimple

コンテナでのサービスの定義に応じて、単一のインスタンスを返すか、複数のインスタンスを返すさまざまなメソッドを定義できます。

Pimpleは、$container->shareメソッドを使用して共有サービスを定義します。次に、サービスをどのように呼び出すかは重要ではなく、サービスをどのように定義するかだけが重要です。

または、必要なものがすべて揃っているにきびを使用することもできます。

于 2012-12-31T15:33:21.793 に答える
0

製品の場合:サービス自体は1つだけです。このサービスには、複数の製品を作成できるメソッドがいくつかありますが、それらはサービスではなくデータオブジェクトである可能性があります。したがって、基本的には$this->getContainer->getService('product')->createNew()、新しい製品インスタンスを返す必要があるものを使用できます。

複数のサービスインスタンスを返す必要がある場合もありますが、これらはおそらくあなたの例には当てはまりません。@camusが前述したように、Pimpleはそのような実装の優れた例であり、実装と理解も非常に簡単です。

于 2012-12-31T15:42:33.207 に答える