Size: a a a

2020 June 30

В

Виктор in Yii Framework 3
Dmitriy S
Коммит там же в пр
Мерси
источник

В

Виктор in Yii Framework 3
Dmitriy S
Не работает этот вариант. Если дефинишина нет ни в одном контейнере, то надо с первого инстанцировать.
Чтобы заработало, надо в тесте strict подвинуть в тот контейнер, где указывается реализация :) Ну и да, надо учитывать порядок добавления контейнеров в мета-контейнер.
источник

В

Виктор in Yii Framework 3
И, полагаю, надо такой же strict добавить и в фабрику.
источник

DS

Dmitriy S in Yii Framework 3
Виктор
Чтобы заработало, надо в тесте strict подвинуть в тот контейнер, где указывается реализация :) Ну и да, надо учитывать порядок добавления контейнеров в мета-контейнер.
Так нельзя делать, не будет основной контейнер работать
источник

А

Алексей R in Yii Framework 3
strict === !autowiring ?
источник

А

Алексей R in Yii Framework 3
если помечать контейнеры этим флагом при добавлении в композитный, то почему это не решение проблемы?
источник

В

Виктор in Yii Framework 3
Dmitriy S
Так нельзя делать, не будет основной контейнер работать
не понял
источник

А

Алексей R in Yii Framework 3
@yiiliveext , какие проблемы будут у такой схемы:
Все контейнеры без автовайринга. Автовайринг в самом композитном контейнере, срабатывает в последнюю очередь и использует при автоподстановке все strict контейнеры.
источник

DS

Dmitriy S in Yii Framework 3
Виктор
не понял
Основной контейнер не будет работать если его strict сделать. В общем сделал с методом hasDefinition, только спрятал его под protected
источник

В

Виктор in Yii Framework 3
Dmitriy S
Основной контейнер не будет работать если его strict сделать. В общем сделал с методом hasDefinition, только спрятал его под protected
С чего бы вдруг он не стал работать? Просто он будет грузить только явно заданные зависимости, что от него и требуется. Если нужен контейнер, который будет грузить классы автолоудом, в мета-контейнер надо добавить такой. Это же то самое поведение, которое ты и хочешь воспроизвести.
источник

В

Виктор in Yii Framework 3
Мне неясно само понятие "основного контейнера"
источник

DS

Dmitriy S in Yii Framework 3
Виктор
С чего бы вдруг он не стал работать? Просто он будет грузить только явно заданные зависимости, что от него и требуется. Если нужен контейнер, который будет грузить классы автолоудом, в мета-контейнер надо добавить такой. Это же то самое поведение, которое ты и хочешь воспроизвести.
источник

В

Виктор in Yii Framework 3
Можно расшифровать?
источник

DS

Dmitriy S in Yii Framework 3
Виктор
Можно расшифровать?
Ты предлагаешь контейнер который прилетает в register сделать strict. А это основной контейнер приложения. То есть, в нем не будет работать инстанцирование сервисов по class_exists, если поставить ему strict.
источник

В

Виктор in Yii Framework 3
Dmitriy S
Ты предлагаешь контейнер который прилетает в register сделать strict. А это основной контейнер приложения. То есть, в нем не будет работать инстанцирование сервисов по class_exists, если поставить ему strict.
Не, ты не так меня понял
источник

В

Виктор in Yii Framework 3
strict - он для того и есть, чтобы автолоадинг не работал в контейнере. Т.е. за исключением каких-то редких случаев он будет работать в составе композитного контейнера. Если в основном приложении и будет использоваться такой, то в составе композитного, и в register должен прилететь именно композитный контейнер.
источник

DS

Dmitriy S in Yii Framework 3
Виктор
strict - он для того и есть, чтобы автолоадинг не работал в контейнере. Т.е. за исключением каких-то редких случаев он будет работать в составе композитного контейнера. Если в основном приложении и будет использоваться такой, то в составе композитного, и в register должен прилететь именно композитный контейнер.
Это уже будет костыль с добавлением фиктивного пустого контейнера для автолоадинга.
источник

В

Виктор in Yii Framework 3
Dmitriy S
Это уже будет костыль с добавлением фиктивного пустого контейнера для автолоадинга.
Не костыль, а адекватное поведение. Есть и другой вариант: выкинуть вообще композитный контейнер.
источник

В

Виктор in Yii Framework 3
Я потыкал твой тест. Там надо перенести определение EngineMarkOne во второй контейнер, который оставить strict. А в самом контейнере  в buildInternal надо пересмотреть работу со strict: оно падает, когда пытается инстанцировать EngineMarkOne через EngineMarkTwo, т.к. это все-таки "примитив".
источник

DS

Dmitriy S in Yii Framework 3
Виктор
Я потыкал твой тест. Там надо перенести определение EngineMarkOne во второй контейнер, который оставить strict. А в самом контейнере  в buildInternal надо пересмотреть работу со strict: оно падает, когда пытается инстанцировать EngineMarkOne через EngineMarkTwo, т.к. это все-таки "примитив".
Там ничего не падает. Все тесты проходят, логика работы не та.
источник