Laravel 서비스 용기 바 인 딩 의 몇 가지 방법 요약

귀속 기초
거의 모든 서비스 용기 연결 은 서비스 제공 자 에서 이 루어 진다.
디 렉 터 리 구조 아래 그림 참조

주:인 터 페 이 스 를 기반 으로 하지 않 으 면 용기 에 연결 할 필요 가 없습니다.용 기 는 PHP 의 반사 서 비 스 를 사용 하여 구체 적 인 대상 을 자동 으로 해석 하기 때문에 대상 을 구축 하 는 방법 을 알려 줄 필요 가 없습니다.
간단 한 귀속
한 서비스 제공 자 에서$this->app 변 수 를 통 해 용기 에 접근 한 다음 bid 방법 으로 바 인 딩 을 등록 할 수 있 습 니 다.이 방법 은 두 개의 매개 변수 가 필요 합 니 다.첫 번 째 매개 변 수 는 우리 가 등록 하고 자 하 는 클래스 이름 이나 인터페이스 이름 입 니 다.두 번 째 매개 변 수 는 클래스 의 인 스 턴 스 를 되 돌려 주 는 패키지 입 니 다.

 $this->app->bind('HelpSpot\API', function ($app) {
 return new HelpSpot\API($app->make('HttpClient'));
});
용기 자 체 를 해석 기의 매개 변수 로 사용 한 다 는 것 을 알 고 이 용 기 를 사용 하여 우리 가 구축 하고 있 는 대상 의 하위 의존 도 를 분석 할 수 있 습 니 다.
단일 예 바 인 딩
singleton 방법 은 한 번 만 분석 할 수 있 는 클래스 나 인 터 페 이 스 를 용기 에 연결 한 다음 용기 호출 은 같은 대상 의 인 스 턴 스 를 되 돌려 줍 니 다.

$this->app->singleton('HelpSpot\API', function ($app) {
 return new HelpSpot\API($app->make('HttpClient'));
});
귀속 원시 값
당신 은 주입 류 를 받 아들 이 는 클래스 가 있 을 수 있 으 며,동시에 원생 의 수 치 를 주입 해 야 합 니 다.예 를 들 어 정형 은 상하 문과 결합 하여 이 클래스 가 필요 로 하 는 모든 값 을 쉽게 주입 할 수 있 습 니 다.

$this->app->when('App\Http\Controllers\UserController')
 ->needs('$variableName')
 ->give($value);
연결 인터페이스 가 실 현 될 때 까지
서비스 용기 의 매우 강력 한 기능 은 연결 인터페이스 가 실 현 될 때 까지 하 는 것 이다.저 희 는 EventPusher 인터페이스 와 그 실현 클래스 인 RedisEventPusher 가 있다 고 가정 합 니 다.이 인터페이스의 RedisEventPusher 를 작성 한 후에 서비스 용기 에 등록 할 수 있 습 니 다.

$this->app->bind(
 'App\Contracts\EventPusher', 
 'App\Services\RedisEventPusher'
);
이 코드 는 용기 에 EventPusher 가 필요 할 때 RedisEventPusher 를 주입 하 는 것 을 알려 줍 니 다.이 제 는 구조 기 나 서비스 용 기 를 통 해 의존 하 는 곳 에 EventPusher 인터페이스 의존 주입 을 할 수 있 습 니 다.

use App\Contracts\EventPusher;

/**
 *          
 *
 * @param EventPusher $pusher
 * @return void
 */
public function __construct(EventPusher $pusher){
 $this->pusher = $pusher;
}
문맥 바 인 딩
때때로 우 리 는 두 가지 종류 가 같은 인 터 페 이 스 를 사용 할 수 있 지만,우 리 는 각 종류 에 서로 다른 실현 을 주입 하 기 를 희망 한다.예 를 들 어,두 컨트롤 러 는 Illuminate\\Contracts\Filesystem\\Filesystem 계약 의 서로 다른 실현 에 의존한다.Laravel 은 이 를 위해 간단 하고 부 드 러 운 인 터 페 이 스 를 정의 합 니 다.

use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\VideoController;
use App\Http\Controllers\PhotoControllers;
use Illuminate\Contracts\Filesystem\Filesystem;

$this->app->when(PhotoController::class)
 ->needs(Filesystem::class)
 ->give(function () {
 return Storage::disk('local');
 });

$this->app->when(VideoController::class)
 ->needs(Filesystem::class)
 ->give(function () {
 return Storage::disk('s3');
 });
라벨
소수의 경우,우 리 는 특정한 분류 아래 의 모든 바 인 딩 을 분석 해 야 합 니 다.예 를 들 어,여러 개의 서로 다른 Report 인 터 페 이 스 를 받 아 실 현 된 보고 취 합 기 를 구축 하고 있 습 니 다.Report 를 등록 한 후에 tag 방법 으로 탭 을 할당 할 수 있 습 니 다.

$this->app->bind('SpeedReport', function () {
 //
});

$this->app->bind('MemoryReport', function () {
 //
});

$this->app->tag(['SpeedReport', 'MemoryReport'], 'reports');
이 서비스 들 은 태그 가 붙 으 면 tagged 방법 으로 쉽게 해석 할 수 있 습 니 다.

$this->app->bind('ReportAggregator', function ($app) {
 return new ReportAggregator($app->tagged('reports'));
});
확장 바 인 딩
extend 방법 은 분석 서 비 스 를 수정 할 수 있 습 니 다.예 를 들 어 서비스 가 분 석 된 후에 추가 코드 장식 을 실행 하거나 이 서 비 스 를 설정 할 수 있 습 니 다.extend 방법 은 수 정 된 서 비 스 를 되 돌려 주 는 패 키 지 를 받 습 니 다.

$this->app->extend(Service::class, function($service) {
 return new DecoratedService($service);
});
총결산
Laravel 서비스 용기 바 인 딩 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Laravel 서비스 용기 바 인 딩 에 관 한 더 많은 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 사랑 해 주세요!

좋은 웹페이지 즐겨찾기