Как использовать служебный контейнер Laravel в пакете (вне приложения)? - PullRequest
0 голосов
/ 19 сентября 2018

Я разрабатываю пакет, который может использоваться приложениями Laravel.В пакете есть ServiceProvider, который потребители используют, когда хотят создать экземпляр содержимого из пакета.

Теперь я хотел бы использовать этот ServiceProvider в собственных тестах пакета для разрешения зависимостей.Интеграционное тестирование, если хотите.

Как я могу это сделать?

Похоже, resolve() зависит от app(), поэтому я прав, предполагая, что сервисный контейнер Laravel не является автономными может использоваться только внутри приложения?

1 Ответ

0 голосов
/ 09 ноября 2018

tldr;composer require illuminate/container

Фасад App:: преобразуется в Illuminate\Foundation\Application::class, и вспомогательные функции (включая app()) находятся в том же пространстве имен.Таким образом, вам нужно composer require illuminate/foundation, чтобы получить это.

Тем не менее, фактический контейнер находится в Illuminate\Container\Container - это базовый класс, который расширен классом Application выше, так что вы можете получитьурезанная версия только контейнера с composer require illuminate/container.

Я также должен отметить, что они имеют одинаковый static::$instance, поэтому использование контейнера с подсветкой должно работать как в приложениях Laravel, так и в приложениях без Laravel.

Пример разрешения экземпляра и вызова метода с автоматическим внедрением зависимости:

use Illuminate\Container\Container;

$container = Container::getInstance();
$concrete = $container->make(Some\Abstract\Interface::class);
$result = $container->call([$concrete, 'methodWithDependencies']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...