[laravel]라라벨 서비스컨테이너

  1. 컨테이너 바인딩
    • 기본바인딩
      • 서비스컨테이너 바인딩
      • 서비스프로바이더 register() 에서 등록함
      • 일반클래스는 등록할 필요가 없으며 인터페이스 구현객체인 경우 등록해서 사용함
      • 인터페이스와 클로저를 파라미터로 전달하여 바인딩
      • 컨트롤러와 같은 클래스에서 바인딩한 인터페이스를 타입힌트로 지정하면 클로저에 정의한 구현체가 자동으로 의존성 주입됨
      • 예) PostController.php 생성자에 Transistor 인터페이스 타입힌트를 지정하면 구현체인 PodcastParser::class 주입
# AppServiceProvider.php

use App\Services\Transistor;
use App\Services\PodcastParser;

...
public function register()
{
    //
    $this->app->bind(Transistor::class, function ($app) {
        return new PodcastParser();
    });
}
...
# PostController.php

use App\Services\Transistor;
use App\Services\PodcastParser;

public function __construct(Transistor $transistor)
{
    $this->transistor = $transistor;
}