Пакет Injector

Получаем ответы на свои вопросы по Yii 3
Ответить
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Пакет Injector

Сообщение yiijeka »

В описании контейнера https://github.com/yiisoft/di#using-container
После настройки контейнера зависимости можно получить через get ():
/** @var \Yiisoft\Di\Container $container */
$object = $container->get('interface_name');
Однако обратите внимание, что использовать контейнер напрямую - это плохая практика, и лучше полагаться на автоматическое подключение, выполненное через Injector, доступный через отдельный yiisoft/injector pacakge.
При взгляде на Injector сложилось впечатление, что этот пакет предназначен исключительно для каких-то специфических вещей использования в коде пакетов фреймворка Yii3, но никак не для клиентского кода - слишком много "магии".

Какую реальную задачу может решить данный пакет? У кого-нибудь есть более менее реальный пример использования, где оправдано использование этого пакета?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Пакет Injector

Сообщение samdark »

Пакет даёт возможность получить в любом вашем классе автоматическую инъекцию зависимостей из контейнера. Например, есть у вас Job-ы для очереди, их можно инстанциировать так:

Код: Выделить всё

final class MyJobFactory
{
    public function createJob(string $class, array $parameters): JobInterface
    {
        return (new Injector($container))->make($class, $parameters);
    }
}
Тогда в Job-ах будет можно делать так:

Код: Выделить всё

final class PrecalculateDistance implements JobInteraface
{
    private CacheInterface $cache;

    public function __construct(CacheInterface $cache)
    {
        $this->cache = $cache;
    }

    public function run()
    {
       // ...
    }
}
Ответить