サービスコンテナがわからない
サービスコンテナをちゃんと理解できていない。
最初の理解
コントローラーの引数に渡すインスタンス
/app/Services/SomeClassService.phpみたいな、なんらかのクラスが定義されているファイル。
なんか違うっぽい
/app/Services/SomeClassService.phpはServiceではあるが、サービスコンテナは別の概念を指している。
バインディング
サービスはサービスコンテナにバインディングして利用されることが想定されているが、バインディングしなくても利用できる。
(このリスクがわかっていない)
サービスプロバイダーはサービスをサービスコンテナにバインディングする役割。
Illuminate\Support\ServicProviderクラスには、Application $appが宣言されている。
/**
* The application instance.
*
* @var \Illuminate\Contracts\Foundation\Application
*/
protected $app;
ApplicationはContainerを継承している。
Illuminate/Container.phpにはbind()が定義されている。
自作のアプリケーションのソースをchatGPTに投げて聞いてみたら、別にバインドしなくてもいいといわれた。
このクラスをサービスとして利用する場合、特別にサービスコンテナへのバインディングは必要ありません。Laravelでは、通常、特定のインターフェースへの依存性がある場合や、シングルトンとして利用する場合にサービスコンテナへのバインディングを行います。
( ´_ゝ`)フーン
もっと複雑な依存関係がある場合は、サービスコンテナにバインドしたほうが、管理しやすいみたい。
単純なクラスの場合は、別にいいのか。
こちらの記事が参考になりました!