Если добавить название сервиса @injectable(serviceid), то будет SL, т.к. код запрашивает из контейнера определенный сервис.- а это уже SL?
А что такое "сервис"? Наверно, какой-то объект все же, да? Но не конкретного класса, а объект с определенным интерфейсом, конечно? Так в чем разница "определенный сервис" и "определенный интерфейс"?Если добавить название сервиса @injectable(serviceid), то будет SL, т.к. код запрашивает из контейнера определенный сервис.
Оба о том, как в итоге объект получит свои сервисы.Может не очень в тему вклинюсь, не пинайте сильно... Очень туго у меня с этими вещами. Из беседы/спора сложилось такое представление:
- если код сам знает как получить у контейнера зависимость и запрашивает её (не зависимо от способа) - это SL;
- если некий инжектор знает о зависимостях в коде и устанавливает их, то это DI;
Тогда почему юбы его не удалить, что ему в коде делать?смотри на это как на коментарий
Прав, а спорим мы в данный момент о том, являются ли аннотации кодом.Может не очень в тему вклинюсь, не пинайте сильно... Очень туго у меня с этими вещами. Из беседы/спора сложилось такое представление:
- если код сам знает как получить у контейнера зависимость и запрашивает её (не зависимо от способа) - это SL;
- если некий инжектор знает о зависимостях в коде и устанавливает их, то это DI;
Я прав? Когда читаешь статьи по теме всё выглядит очень стройно, красиво, удобно и понятно. Когда возвращаюсь к реальному коду и проектам - ничерта не ясно становится, как это всё реализовать и применять полноценно. Хотя тема и очень интересна.
Сервис - это не класс или интерфейс. Сервис - это конкретный объект. Инстанс.А что такое "сервис"? Наверно, какой-то объект все же, да? Но не конкретного класса, а объект с определенным интерфейсом, конечно? Так в чем разница "определенный сервис" и "определенный интерфейс"?
С одной стороны да. С другой, например:Это такой синтаксис конфигурации, ага.
Тебе станет легче, если глагол «Inject» заменить на существительное?
PHP:/** * @DI\Arguments({ * "em" = @DI\Argument("doctrine.orm.entity_manager"), * "session" = @DI\Argument("session") * }) */ public function __construct(EntityManager $em, SessionInterface $session) { $this->em = $em; $this->session = $session; }
Требования аргументов в конструкторе — это уже требование зависимостей. Если их не передать, то код работать, увы, не будет.
class Foo
{
public static function constructWithDependenciesFromSl(ServiceLocatorInterface $sl)
{
return new self($sl->get("doctrine.orm.entity_manager"), $sl->get("session"));
}
public function __construct(EntityManager $em, SessionInterface $session)
{
$this->em = $em;
$this->session = $session;
}
}
всеб тебе удалить. для одних это будет инструкция по сборке, для других конфигурация по умолчанию.Тогда почему юбы его не удалить, что ему в коде делать?
Это не комментарий, а код.
AOP аннотации ты тоже комментариями назовешь? Они изменяют поведение участка кода полностью.
ну, ну. а я буду страдать со свои хоткеем в IDE на find usage и лишу себя долгого эротического путешествия по иерархиям конфигов и проведу это время за скучным распитием пива.В DIC все зависимости расписаны в конфиге или группе конфигов (разбросанных по приложению, но с определенной логикой).
Не найдешь все.Дофига случаев, когда названия методов и классов из строк собираются. Во всяких Yii и Laravel.ну, ну. а я буду страдать со свои хоткеем в IDE на find usage и лишу себя долгого эротического путешествия по иерархиям конфигов и проведу это время за скучным распитием пива.
А у конкретного объекта (внезапно, ООП вообще имеет дело с конкретными объектами) может не быть типа (класса) или интерфейса, зато может быть какой-то сервис? Прикольненько.Сервис - это не класс или интерфейс. Сервис - это конкретный объект. Инстанс.
Тип может не иметь сервисов, а может иметь несколько.