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));
});
}
}