LoginSignup
2
1

More than 5 years have passed since last update.

Laravelのサービスコンテナについて

Posted at

サービスコンテナとは?

  • Laravelの中のDIコンテナ
  • クラスのインスタンスを管理する
  • サービスコンテナに登録することでそのクラスをアプリケーションのどこからでも使用することができる

そもそもDIコンテナとは?

  • インスタンスの生成を全て別の場所で一括で管理すること
  • 単純なDIだけの場合、引数が鬼のような数になる可能性がある
  • 上記を解決するのがDIコンテナ

DIとDIコンテナは異なる

DIとは?

  • Dependency Injectionの略
  • 依存性の注入と言われるが、オブジェクト注入のこと
  • constructorで引数を元に外部からオブジェクトを注入すること。普通は、newを使う
  • Interfaceを使って外部注入したほうがより変更に強くなる
  • constructor以外にもsetter,methodなどから注入する方法も存在する
  • DIとDIじゃない場合の比較をした際のDIのメリット
    • newしないので、引数のクラスが実装されていなくても動かすことが可能
    • 外部注入したクラスに変更があっても、呼び出し元だけを変更すればよい
  • 参考記事

サービスコンテナ詳細

bind/binding(バインド)

  • サービスコンテナに対してインスタンスの生成方法を登録すること
  • バインドの定義場所はServiceProviderクラス
  • バインドの方法種類
    • bind
      • 常に新しいインスタンスを生成
      • 最も利用される
    • bindif
      • 引数で指定された文字列に対するバインドが存在しない場合のみインスタンスを生成
      • 既に存在していれば何もしない
    • singleton
      • インスタンスを1つのみにする場合に利用する
      • 最初インスタンスを生成して、次からはキャッシュされたインスタンスを返す
    • instance
      • 既に生成したインスタンスを返す
      • singleton同様にサービスコンテナにキャッシュされ、生成では同じインスタンスを返す

resolve/resolving(解決する)

  • サービスコンテナが指定されたインスタンスを生成して返すこと
  • 解決方法
    • makeメソッド
    • appヘルパ関数
    • 両方同じ挙動で、指定された文字列にバインドされた処理を実行してインスタンスを返す
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1