2
Laravel 서비스 공급자를 사용하여 IoC의 개념을 배우려고합니다. 지금까지 읽은 내용은 서비스 제공 업체 내의 다른 클래스에 의존하는 모든 클래스 생성 논리를 포함해야합니다. 공정하고 정사각형이지만 올바른 방법으로하고 있는지 확인하고 싶습니다.Laravel IoC -이 일을 제대로하고 있습니까?
내 응용 프로그램에서는 서비스 제공자에게 제공하는 상수에 따라 Tracker
추상 클래스의 하위 항목을 사용하므로 다른 클래스를로드해야합니다. 이것이 올바른 방법인가요?
서비스 공급자 :
class TrackerServiceProvider extends \Illuminate\Support\ServiceProvider {
const TRACKER_API = 0;
const TRACKER_SITE = 1;
public function register() {
$this->app->bind('Tracker', function($app, $parameters) {
switch($parameters['method']) {
case static::TRACKER_API:
return new TrackerAPI(new cURL(), new Shipment($parameters['number']));
break;
case static::TRACKER_SITE:
return new TrackerSite(new cURL(), new Shipment($parameters['number']));
break;
default:
throw Exception('Unknown tracker method provided.');
break;
}
});
}
}
추상 추적기 클래스 (그냥 기본) :
abstract class Tracker {
protected $curl;
protected $shipment;
function __construct(cURL $curl, Shipment $shipment) {
$this->curl = $curl;
$this->shipment = $shipment;
}
}
아니면이 register
방법에서 두 개의 서로 다른 바인딩, 각 클래스를 생성해야합니까? 이처럼 :
class TrackerServiceProvider extends \Illuminate\Support\ServiceProvider {
public function register() {
$this->app->bind('TrackerAPI', function($app, $number) {
return new TrackerAPI(new cURL(), new Shipment($number));
});
$this->app->bind('TrackerSite', function($app, $parameters) {
return new TrackerSite(new cURL(), new Shipment($number));
});
}
}