我将在我的作业中使用接口,并在作业类中获取它的上下文实现。
我读了所有的啧啧声。
我注册它:
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