あなたのケースでサービスファクトリーが機能しない理由を理解するのにいくつか問題があります。互いに無関係な異なるサービス クラスを返す必要がありますか?
工場の例からわかることは、次のようなことができるということです。
class NewsletterFactory
{
public function __constructor(...)
{
// Receive arguments needed to create the service below
}
public function get()
{
// Say the variable $userInput exists and is derived from constructor
if ($userInput === 'string')
return new NewsletterManager($dynamicArgument1);
if ($userInput === 'integer')
return new AnotherNewsletterManager($dynamicArgument2);
return new DefaultNewsletterManager();
}
}
さて、これがあなたのニーズに合わない場合。CustomFactory
必要なものを返すというサービスを作成することもできます。返されるものは直接サービスではないため、好きなことを行うことができます。ただし、これによりCustomFactory
、依存関係コンテナーから作成されたオブジェクトを要求できなくなります。
それに似ているのはFormFactoryです。フォーム タイプをインスタンス化するために使用されるファクトリです。ただし、FormFactory
依存性注入タグとコンパイラ パスと結合されているため、より強力です。これにより、各型が依存性注入システムに登録され、独自に取得できるようになります。コンポーネントのすべての内部構造を正確に把握しているわけではありませんがForm
、他の方法で問題が解決しない場合は、問題を解決できると思います。
よろしく、
マット