Size: a a a

2020 August 16

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Ну да. Я сказал где-то, то это норм?
Это нормально решить можно только безстейтовостью объектов в контейнере
источник

AM

Alexander Makarov in Yii Framework 3
Типа запретить объектам в контейнере иметь конфиг?
источник

AM

Alexander Makarov in Yii Framework 3
И зачем тогда контейнер?
источник

AM

Alexander Makarov in Yii Framework 3
Что он будет настраивать?
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Да, вьюху надо или переделывать на иммутабельную или ресетить.
Именно рисетить, а не удалять инстанс в контейнере. И тут мы неожиданно приходим к мысли, что моя идея с ResetableInterface была здравой и решала эту проблему)
источник

DS

Dmitriy S in Yii Framework 3
Правда на сторонних пакетах это работать не будет, разве что в php-fig пропихнуть
источник

AM

Alexander Makarov in Yii Framework 3
источник

AM

Alexander Makarov in Yii Framework 3
Dmitriy S
Именно рисетить, а не удалять инстанс в контейнере. И тут мы неожиданно приходим к мысли, что моя идея с ResetableInterface была здравой и решала эту проблему)
Это которая с композитным контейнером с двумя контейнерами, один из которых можно обресетить?
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Это которая с композитным контейнером с двумя контейнерами, один из которых можно обресетить?
Нет, это когда объект со стейтом имеет метод reset() который этот стейт сбрасывает
источник

AM

Alexander Makarov in Yii Framework 3
Ну давай допилим тогда уж...
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Ну давай допилим тогда уж...
Надо найти минусы этого подхода, вы их тогда обрисовывали, но я их не помню. Помню, что завернули эту тему
источник

DS

Dmitriy S in Yii Framework 3
Еще вариант юзать слабые ссылки и трейт с методом ensureInstance($this->myService, MyService::class), но программить станет сложнее
источник

DS

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

DS

Dmitriy S in Yii Framework 3
Минус подхода в том, что он работет с сервис-локатором, а значит ContainerInterface надо будет передавать в каждый объект с эти трейтом, что сильно попахивает
источник

AP

Arman Poghosyan in Yii Framework 3
А может делать это на уровне провайдера как-то, кажется в интеграции laravel-roadrunner так делалось
источник

AP

Arman Poghosyan in Yii Framework 3
То есть, там как-то можно было в Service Provider-ах задавать, должны ли объекты, которые дает провайдер удаляться и заново делаться
источник

AP

Arman Poghosyan in Yii Framework 3
И сдокументировать все это хорошо
источник

AP

Arman Poghosyan in Yii Framework 3
Так и для сторонних пакетов можно будет юзать, если их через такой провайдер давать
источник

AP

Arman Poghosyan in Yii Framework 3
П.С. Я не в курсе возможно ли такое в нашем DI, вообще код не смотрел
источник

DS

Dmitriy S in Yii Framework 3
Есть еще третий подход, я его предлагал сегодня для вьюхи. Полученный черз di объекты со стейтом надо клонировать, то есть в конструторе viewRenderer делаем $this->view = clone $view;
источник