Сегодня утром SensioLabs Insight удалил платиновый значок из одного из моих распределенных пакетов.Контейнер для инъекций Symfony не должен передаваться в качестве аргумента
Контейнер для инъекций Symfony не должен передаваться в качестве аргумента.
/** * Sets the Container. * * @param ContainerInterface|null $container */ public function setContainer(ContainerInterface $container = null)
Контейнер для инъекций на основе Symfony был найден в качестве аргумента.
метод является частью следующей службы:
rch_jwt_user.credential_fetcher:
class: RCH\JWTUserBundle\Service\CredentialFetcher
calls:
- [ setContainer, [ "@service_container" ] ]
Я знаю, что я могу передать контейнер в качестве аргумента конструктора, как это:
rch_jwt_user.credential_fetcher:
class: RCH\JWTUserBundle\Service\CredentialFetcher
arguments: [ "@service_container" ]
Но многие сообщества пучков использовать setter, а не конструктор.
Так в чем причина этого
майор
незначительное предупреждение?
Объяснение того, почему и когда мы предпочитаем использовать сеттер, а не передавать контейнер в качестве аргумента в конструкторе (и обратном), будет действительно оценен.
EDIT
В ответ на комментарии:
SLI не заботятся о том, как закачивается контейнер, по-видимому, это плохая практика, чтобы ввести его.
Любая идея альтернативы, совместимой с SLI?
Я не уверен, что проблема заключается в том, как вы вводите инъекции, для меня это выглядит так: «Если вы вводите весь контейнер, вы не являетесь конкретным, какие службы вам нужны». Но я не уверен, потому что сообщение также не ясно. Но, пытаясь ответить на ваш вопрос, я бы сказал, причина в том, что конструктор является сигнатурой класса, используя setter, будет иметь больше смысла! –
По нескольким причинам мне нужно ввести весь контейнер. Моя реализация выглядит как много других, таких как [FOSRestBundle ParamFetcher] (https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Request/ParamFetcher.php). Возможно, мне нужно расширить ContainerAware или реализовать соответствующий интерфейс, я сделаю некоторые попытки, но я действительно не понимаю. – chalasr
Я думаю, что то, что Insight пытается сказать, заключается в том, что вы должны попробовать найти другой способ ввода зависимостей, которые вам нужны в этой службе. Пробовали ли вы модифицировать расширение? – hasumedic