Laravel의 서비스 컨테이너는 클래스 종속성을 관리하고 종속성 주입을 수행하기위한 강력한 도구입니다. 종속성을위한 레지스트리 및 필요할 때이를 해결하는 방법으로 작용합니다. 작동 방식과 사용할 수있는 방법은 다음과 같습니다.
서비스 컨테이너 작동 :
의존성 주입 사용 :
종속성 주입을 위해 서비스 컨테이너를 사용하려면 일반적으로 다음 단계를 따릅니다.
PaymentGateway
와 구체적인 구현 StripePaymentGateway
있을 수 있습니다. 등록 바인딩 : 서비스 제공 업체 (일반적으로 AppServiceProvider
)에서 인터페이스를 구체적인 구현에 바인딩합니다.
<code class="php">public function register() { $this->app->bind(PaymentGateway::class, StripePaymentGateway::class); }</code>
유형 힌트 종속성 : 종속성이 필요한 클래스의 생성자에서 인터페이스를 유형-힌트 :
<code class="php">class OrderController extends Controller { public function __construct(PaymentGateway $paymentGateway) { $this->paymentGateway = $paymentGateway; } }</code>
Laravel이 OrderController
인스턴스화하면 설정된 바인딩으로 인해 StripePaymentGateway
인스턴스를 자동으로 해결하고 주입합니다.
종속성 관리를 위해 Laravel의 서비스 컨테이너를 사용하면 몇 가지 이점이 있습니다.
Laravel의 서비스 컨테이너의 콘크리트 구현에 인터페이스를 바인딩하려면 필요에 따라 여러 가지 방법을 사용할 수 있습니다.
간단한 바인딩 :
서비스 제공 업체의 bind
메소드를 사용하여 인터페이스를 콘크리트 클래스에 바인딩하십시오.
<code class="php">$this->app->bind(InterfaceName::class, ConcreteImplementation::class);</code>
싱글 톤 바인딩 :
응용 프로그램에서 공유 된 클래스의 단일 인스턴스를 원한다면 singleton
사용하십시오.
<code class="php">$this->app->singleton(InterfaceName::class, ConcreteImplementation::class);</code>
인스턴스 바인딩 :
기존 인스턴스를 바인딩하려면 instance
사용하십시오.
<code class="php">$instance = new ConcreteImplementation(); $this->app->instance(InterfaceName::class, $instance);</code>
클로저 바인딩 :
보다 복잡한 시나리오의 경우 폐쇄를 사용하여 인스턴스를 작성 해야하는 방법을 정의 할 수 있습니다.
<code class="php">$this->app->bind(InterfaceName::class, function ($app) { return new ConcreteImplementation($app->make(Dependency::class)); });</code>
이러한 바인딩은 일반적으로 서비스 제공 업체의 register
방법에 설정됩니다.
Laravel의 종속성 주입 기능을 최대한 활용하려면 다음과 같은 모범 사례를 따르십시오.
PaymentServiceProvider
).이러한 관행을 따르면 Laravel의 강력한 의존성 주입 시스템을 사용하여보다 관리 가능하고 테스트 가능하며 유연한 응용 프로그램을 만들게됩니다.
위 내용은 Laravel의 서비스 컨테이너는 어떻게 작동하며 종속성 주입에 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!