1

このシナリオで DI のベスト プラクティスを実装する方法を理解するのに少し苦労しています。

Symfony2 DI コンテナーが実装された ZF1 プロジェクトがあります。すべてのサービス クラスなどは DI コンテナーを介して作成され、現在、サービス クラス自体の依存関係をリファクタリングしています。ここまでは順調ですが、Doctrine Entity の X インスタンスを作成する必要があるという問題に遭遇しましたが、依存関係をサービス クラスからコンテナーに抽象化する方法がわかりません。これは実際の単一クラスのインスタンスではないため、構築時に注入することはできません。

頭に浮かぶいくつかのシナリオがあり、どの道を選ぶのが好ましいかアドバイスを探しています。

  1. DI コンテナーへの参照を取得し、必要に応じてそこから新しいインスタンスを取得します。これには、サービス クラスが DI コンテナーに依存するという欠点があります。

  2. ファクトリを呼び出します。symfony DI コンテナーでのファクトリの実装について読みましたが、これがどのように役立つかわかりません。多分私は何かを逃していますか?

  3. エンティティ className を注入し、インスタンスを動的にインスタンス化します。new \My\Entity()したがって、実行する代わりにnew $this->entityClass、これは正直に言うと臭いがしますが、機能する可能性があります。

  4. ??

symfony2 DI コンテナーを使用して、これらのシナリオが一般的にどのように解決されるか教えてもらえますか?

4

1 に答える 1

1

エンティティ マネージャ自体以外のエンティティを作成するために、サービス クラスに何かを注入する必要はありません。

誤解しない限り、適切な名前空間をインポートして全体を実行することについて話しているだけだからです

$e = new Entity();
$em->persist( $e );
$em->flush();

ダンス。いいえ?

于 2012-07-10T17:39:01.177 に答える