在Laravel document之后,我想将实现接口TransferToInventory
的实现Processable
绑定到特定的类(Handler
)。
可处理的界面
interface Processable
{
public function process(array $data);
}
TransferToInventory类
class TransferToInventory implements Processable
{
public function process(array $data): void
{
dd($data);
}
}
处理程序
class Handler
{
protected $data;
protected $processor;
/**
* This is incoming JSON payload, already decoded to an array
* - var_dump($data);
*
* Raw JSON payload from SQS, if necessary
* - var_dump($job->getRawBody());
*
* @param Job $job
* @param array $data
*/
public function handle(Job $job, array $data)
{
resolve(Processorable::class)->process($data);
}
}
我将依赖项绑定放入AppServiceProvider中。
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->when(Handler::class)
->needs(Processable::class)
->give(function () {
return new TransferToInventory;
});
}
public function boot()
{
//
}
}
但是我总是遇到以下错误。
local.ERROR:目标[App \ Services \ Contract \ Processable]不是 实例化的。
答案 0 :(得分:0)
该Handler
类的所有内容都需要从容器中解析出来,并且需要在其构造函数中具有类型提示依赖项才能使该接口生效,以使上下文绑定起作用。
答案 1 :(得分:0)
正如 lagbox 所建议的,它对我有用,如下所示:
class Handler
{
protected $data;
protected $processor;
public function __construct(Processable $processor)
{
$this->processor = $processor;
}
public function handle(Job $job, array $data)
{
$this->processor->process($data);
}
}