【发布时间】:2019-11-21 02:15:50
【问题描述】:
按照 Laravel document,我想将实现接口 Processable 的实现 TransferToInventory 绑定到特定类 (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] 不是 可实例化。
【问题讨论】:
-
php artisan clear-compiled + php artisan optimize + php artisan config:cache ?
-
也许你可以使用
$this->app->bind(Processable::class, function() use ($model){return new TransferToInventory;}); -
这是什么
Handler类?这叫什么?我会假设AppServiceProvider中的所有这些类引用都是别名?
标签: php laravel dependency-injection laravel-6