命名空間略去了......Laravel IOC自動解析 - 從控制器工作而不是從自定義類
我寫了下面的服務提供商,註冊在配置/ app.php:
class OfferServiceProvider extends ServiceProvider
{
public function register()
{
$this->registerLossControlManager();
}
protected function registerLossControlManager()
{
$this->app->bind('LossControlInterface', 'LossControl');
}
}
這裏是我的LossControlInterface
interface LossControlInterface
{
/**
* @param int $demandId
* @param float $offerTotal
* @param float $productTotal
* @param null|int $partnerId
* @return mixed
*/
public function make($demandId, $offerTotal, $productTotal, $partnerId = null);
/**
* @return float
*/
public function getAcceptableLoss();
/**
* @return bool
*/
public function isAcceptable();
/**
* @return bool
*/
public function isUnacceptable();
/**
* @return null
*/
public function reject();
}
現在控制器內,我可以注入LossController如下:
use LossControlInterface as LossControl;
class HomeController extends BaseController {
public function __construct(LossControl $lossControl)
{
$this->lossControl = $lossControl;
}
public function getLossThresholds()
{
$lossControl = $this->lossControl->make(985, 1000, null);
var_dump('Acceptable Loss: ' . $lossControl->getAcceptableLoss());
var_dump('Actual Loss: ' . $lossControl->calculateLoss());
var_dump('Acceptable? ' . $lossControl->isAcceptable());
}
}
但是,如果我嘗試的依賴性和由命令調用自定義類中注入LossControlInterface:
[2014-09-02 13:09:52] development.ERROR: exception 'ErrorException' with message 'Argument 11 passed to Offer::__construct() must be an instance of LossControlInterface, none given, called in /home/vagrant/Code/.../ProcessOffer.php on line 44 and defined' in /home/vagrant/Code/.../Offer.php:79
看來好像我不能依賴注入其接口爲自定義類,但我可以在依賴注入控制器時。
任何想什麼我做錯了或省略了自動解析工作?
你可以發佈創建自定義類的代碼嗎?它是否也是從服務提供商內部或您的工匠命令中創建的? – 2014-09-02 13:06:38
它是從工匠指令中創建的。命令/ ProcessOffer.php:'private function setOffer(Offer $ offer = null){$ this-> processOffer = $ offer?:new Offer();}' – Gravy 2014-09-02 13:09:22