Closed3

サービスコンテナがわからない

muranciamurancia

サービスコンテナをちゃんと理解できていない。

最初の理解

コントローラーの引数に渡すインスタンス
/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()が定義されている。

muranciamurancia

自作のアプリケーションのソースをchatGPTに投げて聞いてみたら、別にバインドしなくてもいいといわれた。

このクラスをサービスとして利用する場合、特別にサービスコンテナへのバインディングは必要ありません。Laravelでは、通常、特定のインターフェースへの依存性がある場合や、シングルトンとして利用する場合にサービスコンテナへのバインディングを行います。

( ´_ゝ`)フーン

このスクラップは2023/11/19にクローズされました