Laravel 依赖注入“不可实例化”
Posted
技术标签:
【中文标题】Laravel 依赖注入“不可实例化”【英文标题】:Laravel dependency injection "not instantiable" 【发布时间】:2014-02-28 00:39:22 【问题描述】:我花了一天时间尝试调试并试图了解出了什么问题,但是......
这是我的代码:
<?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。第一个注入没有问题,但这个我得到一个错误:
照亮\容器\BindingResolutionException
目标 [RememberCalories\Rest\MyJsonResponseInterface] 不是 可实例化。
似乎没有调用 \App::bind('MyJsonResponseInterface' ...) 中的闭包。 我已将其移至服务提供商,结果相同。
但同时如果手动调用\App::make('MyJsonResponseInterface')
,一切都是理想的创建。
请告知如何调查。
【问题讨论】:
【参考方案1】:您需要 App::bind
完整的命名空间 - 所以在您的示例中,App::bind('RememberCalories\Rest\MyJsonResponseInterface')
。
【讨论】:
非常感谢。它有帮助。以上是关于Laravel 依赖注入“不可实例化”的主要内容,如果未能解决你的问题,请参考以下文章