В моем приложении Laravel я должен вызывать сторонние API-вызовы, поэтому я храню все детали, связанные со сторонними, в базе данных (URL и пароль и т. Д.). Чтобы сделать этот Клиент доступным для всех в приложении, я создал поставщика услуг
ServiceProvider.php
$thirdParties = ThirdParty::all();
collect($thirdParties)->each(function ($thirdParty) {
$this->app->singleton(Str::snake($thirdParty->name), function ($app) use($thirdParty) {
$config = new Config();
$config->setLoginUrl($thirdParty->auth_url)
->setUsername($thirdParty->username)
->setPassword($thirdParty->password);
$client = new Client($config);
$client->Login();
return $client;
});
});
Все работающие файлы, поскольку провайдер извлекает все Thrid Patry и регистрирует одноэлементный класс. Пользователь приложения также может добавить новую Стороннюю программу из пользовательского интерфейса, поэтому теперь для создания этого одиночного кода я поместил тот же код с одним $thirdParty
.
.
Задача
Таким образом, когда новое стороннее приложение будет добавлено, оно отправит задание, в котором я использую тот же экземпляр Singleton того же класса. Но из-за динамического связывания в Laravel Container мой рабочий не знал, как решить эту проблему и начал терпеть неудачу.
PS: после перезапуска работника очереди все работает нормально.
Любая помощь или альтернативные способы приветствуются.
Спасибо.