네임 스페이스 ...에서 :Laravel 자동 해상도 IOC - 컨트롤러에서 작동하지만 내가 설정/app.php에 다음과 같은 서비스 제공을 작성하고 등록</p> <p>간결함을 위해 생략 사용자 정의 클래스
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를 삽입 할 수 있습니다
012 3,516,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
내가 사용자 정의 클래스로 인터페이스를 의존성 삽입 할 수 없습니다 나는 것처럼 보이지만, I 컨트롤러에 종속성을 주입 할 수 있습니다.
무엇이 잘못되었거나 생략했는지에 대한 의견이 있으면 자동 해결이 작동합니까?
사용자 정의 클래스를 작성하는 코드를 게시 할 수 있습니까? 또한 서비스 제공 업체 또는 장인의 명령 내에서 생성됩니까? –
artisan 명령 내에서 만들어집니다. 명령/ProcessOffer.php :'비공개 함수 setOffer (Offer $ offer = null) {$ this-> processOffer = $ offer? : new Offer();}' – Gravy