Есть следующий класс работы с ВК (там несколько нужных API):
class UserApi implements UserApiContract
{
private $user_id;
private $access_token;
private $client;
/**
* UserApi constructor.
*/
public function __construct()
{
$this->client = new Client();
}
public function setUserId(string $user_id)
{
$this->user_id = $user_id;
}
public function setAccessToken(string $token)
{
$this->access_token = $token;
}
}
Задача состоит в том, чтобы задать свойства access_token и user_id один раз для всего приложения. Эти данные получаются в функции Auth стороннего класса (самописная простая аутентификация через ВК, просто получается user_id и access_token, создается модель, затем делается Auth::login()).
Для этих целей я пробую использовать сервис-контейнер таким образом. После получения этих параметров в процедуре Auth я кладу уже настроенные инстанс в сервис контейнер
$res=getData();
$vk = new UserApi();
$vk->setAccessToken($res['access_token']);
$vk->setUserId($res['user_id']);
app()->instance(UserApiContract::class, $vk);
В самом классе аутентификации это инстанс доступен без всяких проблем. Но вот когда я пытаются подсунуть его контроллеру:
class DashController extends Controller
{
private $vk;
public function __construct(UserApiContract $vk)
{
$this->vk=$vk;
}
}
То при обращении к контроллеру ловлю эксепшн: [UserApiContract] is not instantiable. Дамп сервис контейнера показывает, что ранее положенного инстанса там нет. Мне кажется, что я все же не до конца понял принцип работы IoC. Может надо вручную передавать сервис-контейнер в каждый класс? Если нет, то как лучше сделать глобально доступный инстанс с уже настроенными свойствами?
P.S. Если я делаю биндинг в сервис-провайдере, то инстанс доступен везде, но соответственно свойства user_api и access_token - null, т.к процедура аутентификации вызвается позже метода register в сервис провайдере.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники