私は最終的にポイントを得たようだ理解していますよう払拭する広い
/**
* Register an existing instance as shared in the container.
*
* @param string $abstract
* @param mixed $instance
* @return void
*/
public function instance($abstract, $instance);
registerdアプリですので:
を
- ファサードは、コンテナ内の実際のサービスインスタンスへの参照を保持します
- インスタンスが$ app-> instance()または他の手段を使用して新しいインスタンスによって配置された場合、Facade参照は以前の削除されたインスタンスをまだ指しているので廃止されます。
- clearResolvedInstanceでfacadeインスタンス参照をクリアすると、次回ファサードが呼び出されたときに新しい参照を保存するために、resolveFacadeInstance($ name)を使用します。
私はそれを正しくしましたか?
これらresolvedInstancesを管理し、返すのポイントは何:
これは別の質問につながる
if (isset(static::$resolvedInstance[$name])) {
return static::$resolvedInstance[$name];
}
return static::$resolvedInstance[$name] = static::$app[$name];
だけではなく、常にこのようにコンテナから直接インスタンスを返す:
return static::$app[$name];
申し訳ありませんが、もう少し説明できますか? 「未解決のバージョンが消去されました」と言いますが、奇妙なことに、このメソッドは「clearResolvedInstance」と呼ばれています。あなたの答えをもう少し詳しく説明してください。ありがとう、 –
私はプロではありません... https://laravel.com/docs/5.4/containerこのリンクをチェックすると、特に既存のオブジェクトがコンテナに渡されていることを明示的に示すバインディングインスタンスの部分があります。それは何をしているのは、生のHTTPリクエストを取得し、それをアプリケーションコンテナにバインドすることです。これにより、さらに下位のリクエストが$ request-> has( 'some_thing')と言うことができます... –
1.リクエストオブジェクトをコンテナにバインドします。わかった。では、Facade :: clearResolvedInstance( 'request')とはまったく何ですか?どのインスタンスがクリアされますか? –