我花了一天时间尝试调试并试图了解出了什么问题,但是......
所以这是我的代码:
<?php
namespace RememberCalories\Rest;
interface MyJsonResponseInterface
{
public function getResponse();
}
这是我要注入的课程:
<?php
namespace RememberCalories\Rest;
class MyJsonResponse implements MyJsonResponseInterface
{
protected $success;
protected $responseCode;
protected $responseMsg;
protected $data;
public function __construct($data, $responseCode=0, $responseMsg='')
{
$this->data = $data;
$this->responseCode = $responseCode;
$this->responseMsg = $responseMsg;
if ( $this->responseCode === 0 ) {
$this->success = true;
}
}
...
结合:
\App::bind('MyJsonResponseInterface', function($app, $parameters) {
$obj = new \RememberCalories\Rest\MyJsonResponse(null);
// var_dump($obj);
// die();
return $obj;
});
最后控制器:
<?php
use \RememberCalories\MainMenu\MainMenu;
use \RememberCalories\Repository\TargetEloquentRepository as TargetRepository;
use \RememberCalories\Rest\MyJsonResponseInterface;
//use \RememberCalories\Rest\MyJsonResponse;
class BaseController extends Controller
{
protected $viewVars;
protected $mainMenu;
//Dependency injection classes
protected $target;
protected $myJsonResponse;
public function __construct(TargetRepository $target, MyJsonResponseInterface $myJsonResponse )
{
$this->beforeFilter('accessFilter');
$this->target = $target;
//$this->myJsonResponse = $myJsonResponse;
$this->mainMenu = (new MainMenu())->build();
$this->prepareViewVariables();
}
所以问题在于BaseController的第二个参数:MyJsonResponseInterface。第一个注入没有问题,但这个我得到一个错误:
Illuminate \ Container \ BindingResolutionException
目标[RememberCalories \ Rest \ MyJsonResponseInterface]不是 实例化。
似乎没有调用\ App :: bind('MyJsonResponseInterface'...)中的Closure。 我已将其移至服务提供商,但结果相同。
但同样如果要手动调用\App::make('MyJsonResponseInterface')
,理想情况下就会创建所有内容。
请告知调查方法。
答案 0 :(得分:1)
您需要App::bind
完整的命名空间 - 所以在您的示例中,App::bind('RememberCalories\Rest\MyJsonResponseInterface')
。