수색…
구현에 대한 인터페이스 바인딩
서비스 프로 바이더 register
메소드에서는, 인터페이스를 구현에 바인드 할 수 있습니다.
public function register()
{
App::bind( UserRepositoryInterface::class, EloquentUserRepository::class );
}
지금부터, 매번 앱에서의 인스턴스가 필요합니다 UserRepositoryInterface
, Laravel은 자동의 새로운 인스턴스 주입합니다 EloquentUserRepository
:
//this will get back an instance of EloquentUserRepository
$repo = App::make( UserRepositoryInterface:class );
인스턴스 바인딩
우리는 서비스 컨테이너를 그 안에있는 객체의 인스턴스를 바인딩하여 레지스트리로 사용할 수 있으며 필요할 때 다시 가져올 수 있습니다 :
// Create an instance.
$john = new User('John');
// Bind it to the service container.
App::instance('the-user', $john);
// ...somewhere and/or in another class...
// Get back the instance
$john = App::make('the-user');
서비스 컨테이너에 싱글 톤 바인딩하기
우리는 클래스를 싱글 톤으로 바인딩 할 수 있습니다 :
public function register()
{
App::singleton('my-database', function()
{
return new Database();
});
}
이렇게하면 처음으로 'my-database'
인스턴스가 서비스 컨테이너에 요청 될 때 새 인스턴스가 만들어집니다. 이 클래스의 모든 연속 요청은 처음 생성 된 인스턴스를 반환합니다.
//a new instance of Database is created
$db = App::make('my-database');
//the same instance created before is returned
$anotherDb = App::make('my-database');
소개
서비스 컨테이너 는 기본 Application 개체입니다. Dependency Injection Container 및 Service Provider에서 바인딩을 정의하여 애플리케이션 레지스트리로 사용할 수 있습니다.
서비스 제공자 는 응용 프로그램을 통해 서비스 클래스를 작성하고 구성을 부트 스트랩하며 인터페이스를 구현에 바인딩하는 방식을 정의하는 클래스입니다
서비스 는 하나 이상의 로직 상관 작업을 함께 래핑하는 클래스입니다.
서비스 컨테이너를 종속성 주입 컨테이너로 사용
서비스 컨테이너를 Dependency Injection Container로 사용할 수 있습니다. Dependency Injection Container는 객체의 생성 프로세스를 응용 프로그램의 한 지점에 종속 관계로 바인딩합니다.
PdfCreator
의 생성이 두 개의 객체를 종속물로 필요로한다고 가정 해 봅시다. 우리가 PdfCreator
의 인스턴스를 PdfCreator
할 때마다, 우리는 이러한 의존성을 생성자에게 전달해야한다. Service Container를 DIC로 사용하여 바인딩 정의에서 PdfCreator
생성을 정의하고 Service Container에서 직접 필요한 종속성을 가져옵니다.
App:bind('pdf-creator', function($app) {
// Get the needed dependencies from the service container.
$pdfRender = $app->make('pdf-render');
$templateManager = $app->make('template-manager');
// Create the instance passing the needed dependencies.
return new PdfCreator( $pdfRender, $templateManager );
});
그럼, 우리의 애플 리케이션의 모든 지점에서, 우리는 단순히 할 수있는 새로운 PdfCreator
를 얻으려면 :
$pdfCreator = App::make('pdf-creator');
그리고 서비스 컨테이너는 우리에게 필요한 의존성과 함께 새로운 인스턴스를 생성 할 것입니다.