別のファクトリサービスを使用するサービスを作成し、さまざまなタイプのオブジェクトを返す必要があります。
これが私のサービスの定義です:
services:
games.search_factory:
class: %games.search_factory.class%
calls:
- [ setContainer, ["@service_container"] ]
games.search:
class: %games.search.base.class%
factory_service: games.search_factory
factory_method: get
私の%games.search_factory.class%
getメソッドは、リクエストパラメータに応じて異なるオブジェクトを返します。
私%games.search.base.class%
は抽象的です。
私の目標は-私が電話するとき
$this->get("games.search");
ファクトリメソッドの結果を取得したい。しかし、コードを実行すると、次のエラーが発生します。FatalErrorException:エラー:抽象クラスをインスタンス化できません。
だから私は2つの質問があります:
- DIシステムがファクトリメソッドの結果を返すのではなく、クラスをインスタンス化しようとするのはなぜですか?
- 必要なものを(きれいにそして簡潔に)実装する方法はありますか?
更新:コードの一部にバグがありましたが、ここには表示されていません。この2つの検索サービスの他に、検索タイプごとにサービスを用意し、工場から返送しました。しかし、これらのサービスの定義では、基本クラス(抽象)をクラスとして使用しました。
非常に良い結論は、ファクトリからさまざまなタイプのオブジェクトを返すことが可能であるということです。