小编KKK*_*KKK的帖子

如何在 Laravel Job 类中使用绑定实现?

我将在我的作业中使用接口,并在作业类中获取它的上下文实现。

我读了所有的啧啧声。

我注册它:

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app
            ->when(SendinBlueJob::class)
            ->needs(MessageProviderInterface::class)
            ->give(SendinBlueService::class);
    }
}
Run Code Online (Sandbox Code Playgroud)

我派遣工作:

class MessageObserver
{
    public function created(MessageInterface $message)
    {
        SendinBlueJob::dispatch($message);
    }
}
Run Code Online (Sandbox Code Playgroud)

在工作类别中,我想获得绑定服务:

class SendinBlueJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

     public $message;
     public $messageProvider;

    public function __construct(MessageInterface $message, MessageProviderInterface $messageProvider)
    {
        $this->message = $message;
        $this->messageProvider = $messageProvider;
        $this->handle();
     }

    public function handle()
    {
        dd($this->messageProvider);
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法调度作业,因为服务器抛出错误:

函数 App\Jobs\SendinBlueJob::__construct() 的参数太少,第 16 行 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php 中传递了 1 个参数,预计正好有 2 个参数

我理解它,但我不明白为什么 …

php containers dependency-injection solid-principles laravel

2
推荐指数
1
解决办法
3228
查看次数