Х
Но все компоненты А должны шейрить один и тот же инстанс Сервиса Х между собой и ни с кем больше
Кто-нибудь знает какие-либо красивые решения для данной проблемы?
звучит как обычный синглтон
У компонента B своя версия Сервиса Х, которая шейрится между всеми компонентами В
Как вариант вижу разбить по модулям А и В, провайдить в них сервис Х и тогда все компоненты внутри модуля будут работать с этим сервисом. Только сервис не должен быть provide: root Вроде так
вроде сервис может быть и provide: root, это не помешает ему также и запровайдится в описанные модули А и В, поправьте, если не прав
Это будет один инстанс тогда
Так можно, но компоненты являются частью одного модуля. Там много на этом заварухи. Поэтому и ищу красивое решение без изменения модульной структуры
А чем плохо разбить на подмодули? Тем более кейс прям и просит этого)
Ещё вариант, кажется, провайдить внутрь компонента, и тогда дочерние компоненты должны юзать этот инстанс сервиса
С компонентом будет лучше, но придется подпиливать компонент под каждую универсальную зависимость или прокидывать класс через отдельный токен Подмодули плохи тем, что необходимо универсальное решение для любого компонента
Решение через модули - так себе. Если невозможно ограничить через injection иерархию, то можно сделать два разных injection token, которые будет provided in root, но каждый из них useClass того же сервиса. Потом компоненты А будет инджектить один токет, а Б - другой.
Здесь и беда с универсальным решением, что нужно сделать токен под каждый случай
Грубо говоря нужна Map<Component, Service>, вот и ищу красивое решение
я вот сижу и думаю а решение через модули вообще будет работать? там же будет тупо race condition, кто успел того и тапки т.е это будет всегда один инстанс
Ну случая всего 2, да?
Нет, может вылезти и в 4, поэтому и ищу красивое решение
А то чего завит какой из случаев использовать?
а можно все 4 случая озвучить?
я конечно не юзал сам но можно попробовать вот так: https://angular.io/api/core/InjectionToken#tree-shakable-injectiontoken т.е прям в файле где у вас компонент прям на месте токен создаете, внутри фабрику, и токен сразу в конструктор
Будут новые инстансы
не должно, мы указываем providedIn: 'root' же
Пофиг. Это element injector
ээм нет это module injector
Тут нужна фабрика с общим сервисом и weekmap. В нее передавать класс и смотреть если создан отдавать, а если нет новый делать. Что-то типа такого
В декораторп компонента element injector
где ты чел увидел что я предлагаю в декоратор компонента регать?
ну 10 раз еще раз перечитайте, ссылку откройте, я хз где вы это видите
Чего вы такой агрессивный?
и агрессивность хз где видите
Обсуждают сегодня