在Laravel文档之后,我想将一个实现接口Processable
的实现TransferToInventory
绑定到特定的类(Handler
(。
可处理接口
interface Processable
{
public function process(array $data);
}
转移到库存类
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);
}
}
我将依赖项绑定放在应用程序服务提供程序中。
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->when(Handler::class)
->needs(Processable::class)
->give(function () {
return new TransferToInventory;
});
}
public function boot()
{
//
}
}
但我总是收到以下错误。
当地。错误:目标 [应用\服务\协定\可处理] 不是 可实例化。
这个
Handler
类是什么都需要从容器中解析,并且需要在其构造函数中具有类型提示依赖项,以便此接口才能使上下文绑定正常工作。 正如 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);
}
}