Size: a a a

2020 June 29

DS

Dmitriy S in Yii Framework 3
Nex Otaku
Один из вариантов решения, сделать композит вложенным. Тогда определение будет запрашиваться не в цикле, а в рекурсии, и вернёт по чесноку самое первое найденное определение, либо отдаст фолбек с созданием объекта.
Это не соответствет идее комозитного контейнеа
источник

NO

Nex Otaku in Yii Framework 3
Чем не соответствует?
источник

NO

Nex Otaku in Yii Framework 3
Все методы и тесты останутся прежними, поменяется только реализация. И тест из PR заработает.
источник

DS

Dmitriy S in Yii Framework 3
Nex Otaku
Чем не соответствует?
Потому что здесь важен перебор, пока мы не дойдем до контейнера, который имеет соответствующий сервис. Суть решаемой проблемы в том, что в родном контейнере мы можем получить любой существующий класс, котрого нет в определениях контейнера. Но у нас может быть ситуация, когда класс существут, но переопределен в другом контейнере с определенными параметрами.
источник

NO

Nex Otaku in Yii Framework 3
Виктор
Идея-то в том, что в проекте может быть несколько контейнеров. И удобно получать к ним доступ через единую точку входа, такой же контейнер, который сам ничего резолвить не умеет, но знает, кто это умеет.
Это годная идея. Модули подключать, то да сё )
источник

В

Виктор in Yii Framework 3
Dmitriy S
Потому что здесь важен перебор, пока мы не дойдем до контейнера, который имеет соответствующий сервис. Суть решаемой проблемы в том, что в родном контейнере мы можем получить любой существующий класс, котрого нет в определениях контейнера. Но у нас может быть ситуация, когда класс существут, но переопределен в другом контейнере с определенными параметрами.
Ещё тема... В каком-то контейнере, не помню автора, по умолчанию создаются только те объекты, которые явно определены конфигурацией. И надо отдельно включать возможность инстанцирования автоподгружаемых классов.
источник

В

Виктор in Yii Framework 3
Мы можем подробное сделать
источник

DS

Dmitriy S in Yii Framework 3
Виктор
Ещё тема... В каком-то контейнере, не помню автора, по умолчанию создаются только те объекты, которые явно определены конфигурацией. И надо отдельно включать возможность инстанцирования автоподгружаемых классов.
Я это уже предагал @samdark
источник

NO

Nex Otaku in Yii Framework 3
Так. У меня вопрос. Зачем вообще изначально вводить "замену класса"?
источник

В

Виктор in Yii Framework 3
Тогда мы будем спокойны за свою реализацию
источник

DS

Dmitriy S in Yii Framework 3
Dmitriy S
@samdark, как ты смотришь на strict mode в контейнере, чтобы только явно объявленные definitions можно было получать.
Вот
источник

В

Виктор in Yii Framework 3
Nex Otaku
Так. У меня вопрос. Зачем вообще изначально вводить "замену класса"?
Для переопределения каких-то классов чужого модуля, не использующего интерфейсы, например
источник

В

Виктор in Yii Framework 3
Для внедрения изменений в старый проект, как вариант
источник

NO

Nex Otaku in Yii Framework 3
Если мы разрешим задавать определение только для интерфейсов, то проблемы и не будет... Вернётся только тот класс, который соответствует интерфейсу, остальные контейнеры ответят что интерфейс не найден.
источник

NO

Nex Otaku in Yii Framework 3
Виктор
Для внедрения изменений в старый проект, как вариант
Есть кейс, когда по-другому не решить?
источник

В

Виктор in Yii Framework 3
Он же вроде сказал норм) Пролистал дальше, не нашел обсуждения. Пропустил?
@yiiliveext
источник

DS

Dmitriy S in Yii Framework 3
Nex Otaku
Так. У меня вопрос. Зачем вообще изначально вводить "замену класса"?
Дело здесь не в замене класса, дело в том, что явное определение класса должно быть приоритетнее  неявного его получения по тому признаку, что класс существует
источник

DS

Dmitriy S in Yii Framework 3
Собственно, наглядная демонстрация
https://github.com/yiiliveext/yii-demo/tree/exp
источник

DS

Dmitriy S in Yii Framework 3
Без этого при демка нормально работать не будет
источник

NO

Nex Otaku in Yii Framework 3
Где конкретно демонстрация кейса?
источник