[英]Contextual binding in Laravel
在 Laravel文檔之后,我想將實現接口Processable
的實現TransferToInventory
綁定到特定的 class ( Handler
)。
可處理接口
interface Processable
{
public function process(array $data);
}
TransferToInventory class
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] 不可實例化。
無論這個Handler
class 是什么,都需要從容器中解析,並且需要在其構造函數中具有類型提示依賴項,才能使上下文綁定起作用。
正如 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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.