2016-11-25 2 views
4

ContainerBuilderを使用してコンテナを設定し、実際にContainerを得るためにコンパイルする際に、依存関係と定義をセットアップしました。PHP-DI injectOnがセッターメソッドに注入されていません

injectOn()メソッドのコンセプトが見当たりませんでしたか、ここで何か間違っていますか($this->translatorは未割り当てのままです)。私は、クラスをインスタンス化し、オブジェクトをContainerBuilderに追加することと、同じ結果を持つ\DI\object()の定義として渡すという、異なるアプローチを試みました。

答えて

3

the documentationによれば、PHP-DIはセッターを介して自動配線を実行しません。

あなたはTextHandleクラスの定義を追加し、セッターを通じてTranslatorを注入するように設定する必要があります

$containerBuilder->addDefinitions([ 
    TextHandle::class => \DI\object()->method('setTranslator', \DI\get(Translator::class)) 
]); 
+0

あなたがリンクされ、マニュアルセクションでは、コンテナはタイプせずにオブジェクトをインスタンスコンストラクタ引数を示唆したシナリオを指します。私のオブジェクトにはコンストラクタがなく、手動でインスタンス化されます。それはまだ適用されますか? **編集:** http://php-di.org/doc/inject-on-instance.htmlこのマニュアルの節では '今、$オブジェクトは(セッターの注入とプロパティの注入を通して)すべての依存関係が注入されています。 ' – Daniel

+0

ここで重要な点は、 "' setLogger() 'は呼び出されないということです。これは、オートワイヤリングはセッターではなく、コンストラクターでのみ動作すると仮定しています。依存関係を注入する必要があるクラスを手動でインスタンス化するのは悪い習慣です。コンテナから 'TextHandle'インスタンスを取得する必要があります。 –

+0

あなたの編集に答えるには:このケースでは、コンテナ内の注射の適切な設定が必要です。 'injectOn()'を呼び出す前に、記述した方法で定義を追加してみてください。また、「ある状況では、オブジェクトの作成を制御できません」という文章は、私には非常に難解ですが、どうすればそれが可能かはわかりません。 –

関連する問題