수색…


구현에 대한 인터페이스 바인딩

서비스 프로 바이더 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');

그리고 서비스 컨테이너는 우리에게 필요한 의존성과 함께 새로운 인스턴스를 생성 할 것입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow