Size: a a a

2021 January 26

AM

Alexander Makarov in Yii Framework 3
Dmitriy S
В случае со слабыми ссылками будет то же, только в сервисе А сервис Б превратится в нул.
Не, не те ссылки имеются ввиду.
источник

AM

Alexander Makarov in Yii Framework 3
Контейнер их не будет отдавать. Он их будет резолвить.
источник

AM

Alexander Makarov in Yii Framework 3
Здесь проблема будет только если в не-weak контейнере сделать сервис, который зависит от чего-то из weak-контейнера.
источник

AM

Alexander Makarov in Yii Framework 3
Что сведёт на нет авто-резолв, в общем-то.
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Здесь проблема будет только если в не-weak контейнере сделать сервис, который зависит от чего-то из weak-контейнера.
Именно, так это сплошь и рядом
источник

А

Алексей R in Yii Framework 3
Dmitriy S
Смотри есть необнуляемый контейнер С1 и обнуляемый С2. В С1 есть сервис А, а в С2 сервис Б. Сервис Б есть в конструктора сервиса А. Если ты получил из композитного контейнера сервис А, то он закешируется в С1 и внутри него уже будет экземпляр сервиса Б. Даже если ты очистишь С2, то в С1 останется сервис А со старым экземпляром сервиса Б.
смотри, тут вариантов несколько и все под нашим контролем:

В конце, когда мы ожидаем "очищения", всё, что не записано в стейте из С2 исчезнет. Но там останется сервис Б, т.к. он залип в сервисе А.
У нас 2 решения:
- продолжаем выполнение и это скорее всего плохо
- мы сбрасываем воркер (считай все контейнеры) и докладываем о стейте
  разработчик видит это и у него 2 варианта
 * перенести сервис Б в контейнер С1
 * пофиксить сервис А чтобы не было стейта
источник

AM

Alexander Makarov in Yii Framework 3
A -> non_weak С1 -> weak С2 - нет дефинишна, create!
B (A) -> non_weak С1 - тут есть дефинишн. Ссылка на A залипла, weak не почистится.
источник

А

Алексей R in Yii Framework 3
Ещё, когда мы резолвим А из С1, то мы можем сделать такой режим, что создаваться он будет без контейнера С2 (уверенный режим)
Типа разраб гарантировал, что А - стейтлесс
источник

DS

Dmitriy S in Yii Framework 3
В общем я предлагал два 100% рабочих решения проблемы. 1 - иммутабельные сервисы, 2 - ResetableInterface. Если найдёте лучшее решение - будет гуд.
источник

AM

Alexander Makarov in Yii Framework 3
Dmitriy S
В общем я предлагал два 100% рабочих решения проблемы. 1 - иммутабельные сервисы, 2 - ResetableInterface. Если найдёте лучшее решение - будет гуд.
Иммутабельные сервисы не всегда возможны, но где возможны делаем.
источник

А

Алексей R in Yii Framework 3
Dmitriy S
В общем я предлагал два 100% рабочих решения проблемы. 1 - иммутабельные сервисы, 2 - ResetableInterface. Если найдёте лучшее решение - будет гуд.
мои последние 2 сообщения разве не должны были развеять сомнения про жидкий контейнер?
источник

AM

Alexander Makarov in Yii Framework 3
Алексей R
мои последние 2 сообщения разве не должны были развеять сомнения про жидкий контейнер?
Неа.
источник

AM

Alexander Makarov in Yii Framework 3
Я верно понял?
источник

AM

Alexander Makarov in Yii Framework 3
Переслано от Alexander Makarov
A -> non_weak С1 -> weak С2 - нет дефинишна, create!
B (A) -> non_weak С1 - тут есть дефинишн. Ссылка на A залипла, weak не почистится.
источник

DS

Dmitriy S in Yii Framework 3
Алексей R
мои последние 2 сообщения разве не должны были развеять сомнения про жидкий контейнер?
Нет. Накидай такой контейнер, это в принципе не долго, и ты сам все увидишь.
источник

AM

Alexander Makarov in Yii Framework 3
Alexander Makarov
Переслано от Alexander Makarov
A -> non_weak С1 -> weak С2 - нет дефинишна, create!
B (A) -> non_weak С1 - тут есть дефинишн. Ссылка на A залипла, weak не почистится.
Пример этого - stateless-класс без интерфейса SmsSender, без конфига.
источник

А

Алексей R in Yii Framework 3
Alexander Makarov
Переслано от Alexander Makarov
A -> non_weak С1 -> weak С2 - нет дефинишна, create!
B (A) -> non_weak С1 - тут есть дефинишн. Ссылка на A залипла, weak не почистится.
создавая сервис из С1 мы можем уверенно резолвить зависимости из С1
источник

AM

Alexander Makarov in Yii Framework 3
В варианте с weak либо он залипнет (если от него что-то зависит в non-weak, либо будет пересоздаваться постоянно. И то и другое не очень хорошо.
источник

DS

Dmitriy S in Yii Framework 3
Мы уже столько времени, включая прошлые разы, потратили на обсуждение, что давно можно было проверить)
источник

AM

Alexander Makarov in Yii Framework 3
Алексей R
создавая сервис из С1 мы можем уверенно резолвить зависимости из С1
Ну так и делаем. Только  A  нет в C1, она в C2.
источник