Laravel コンテナ

app()->make() は、サービスコンテナから新しいインスタンスを作成します。つまり、毎回新しいインスタンスが生成されます。
app()->get() は、サービスコンテナから既存のインスタンスを取得します。既にバインドされている場合はそのインスタンスが返され、存在しない場合は新しいインスタンスが作成されますが、その後は同じインスタンスが返されます。テストケースで`Client::class`に対してバインドされたモックインスタンスは、通常のアプリケーションの実行中に一度だけ作成され、その後は同じインスタンスが使用されます。そのため、app()->get() を使用してサービスコンテナから取得することで、テストケース内の複数の箇所で同じインスタンスを参照できます。一方、app()->make() を使用すると、常に新しいインスタンスが生成されるため、テストケース内でのインスタンスの一貫性が保たれず、期待通りの動作をしない可能性があります。したがって、テストケース内でサービスコンテナから`Client::class`のインスタンスを取得する場合は、app()->get()を使用して同じインスタンスを参照する方が適切です。

$this->app->bind(): サービスコンテナに新しいクラスやインターフェースのバインドを追加するために使用されます。通常は、クロージャを使用して依存関係を解決するためのルールを定義します。

$this->app->bind('ClassName', function ($app) { return new ClassName($app->make('Dependency')); }); 

$this->app->instance(): サービスコンテナに特定のクラスの既存のインスタンスをバインドするために使用されます。これは、通常は外部から既に作成されたインスタンスをサービスコンテナに登録する場合に使用されます。

$instance = new ClassName(); $this->app->instance('ClassName', $instance);

コメント

タイトルとURLをコピーしました