169 похожих чатов

Всем привет! Есть компонент А, которому нужно иметь свою версию Сервиса

Х
Но все компоненты А должны шейрить один и тот же инстанс Сервиса Х между собой и ни с кем больше
Кто-нибудь знает какие-либо красивые решения для данной проблемы?

29 ответов

6 просмотров

звучит как обычный синглтон

🇺🇦Serhii- Автор вопроса
Evgheni Чернявский
звучит как обычный синглтон

У компонента B своя версия Сервиса Х, которая шейрится между всеми компонентами В

🇺🇦Serhii
У компонента B своя версия Сервиса Х, которая шейр...

Как вариант вижу разбить по модулям А и В, провайдить в них сервис Х и тогда все компоненты внутри модуля будут работать с этим сервисом. Только сервис не должен быть provide: root Вроде так

Дмитрий Могилевцев
Как вариант вижу разбить по модулям А и В, провайд...

вроде сервис может быть и provide: root, это не помешает ему также и запровайдится в описанные модули А и В, поправьте, если не прав

🇺🇦Serhii- Автор вопроса
🇺🇦Serhii- Автор вопроса
Дмитрий Могилевцев
Как вариант вижу разбить по модулям А и В, провайд...

Так можно, но компоненты являются частью одного модуля. Там много на этом заварухи. Поэтому и ищу красивое решение без изменения модульной структуры

🇺🇦Serhii
Так можно, но компоненты являются частью одного мо...

А чем плохо разбить на подмодули? Тем более кейс прям и просит этого)

🇺🇦Serhii
Так можно, но компоненты являются частью одного мо...

Ещё вариант, кажется, провайдить внутрь компонента, и тогда дочерние компоненты должны юзать этот инстанс сервиса

🇺🇦Serhii- Автор вопроса
Дмитрий Могилевцев
Ещё вариант, кажется, провайдить внутрь компонента...

С компонентом будет лучше, но придется подпиливать компонент под каждую универсальную зависимость или прокидывать класс через отдельный токен Подмодули плохи тем, что необходимо универсальное решение для любого компонента

🇺🇦Serhii
С компонентом будет лучше, но придется подпиливать...

Решение через модули - так себе. Если невозможно ограничить через injection иерархию, то можно сделать два разных injection token, которые будет provided in root, но каждый из них useClass того же сервиса. Потом компоненты А будет инджектить один токет, а Б - другой.

🇺🇦Serhii- Автор вопроса
Alex Okrushko
Решение через модули - так себе. Если невозможно о...

Здесь и беда с универсальным решением, что нужно сделать токен под каждый случай

🇺🇦Serhii- Автор вопроса
🇺🇦Serhii
Здесь и беда с универсальным решением, что нужно с...

Грубо говоря нужна Map<Component, Service>, вот и ищу красивое решение

Alex Okrushko
Решение через модули - так себе. Если невозможно о...

я вот сижу и думаю а решение через модули вообще будет работать? там же будет тупо race condition, кто успел того и тапки т.е это будет всегда один инстанс

🇺🇦Serhii- Автор вопроса
Alex Okrushko
Ну случая всего 2, да?

Нет, может вылезти и в 4, поэтому и ищу красивое решение

🇺🇦Serhii
Нет, может вылезти и в 4, поэтому и ищу красивое р...

А то чего завит какой из случаев использовать?

🇺🇦Serhii
Нет, может вылезти и в 4, поэтому и ищу красивое р...

я конечно не юзал сам но можно попробовать вот так: https://angular.io/api/core/InjectionToken#tree-shakable-injectiontoken т.е прям в файле где у вас компонент прям на месте токен создаете, внутри фабрику, и токен сразу в конструктор

Andrei
Будут новые инстансы

не должно, мы указываем providedIn: 'root' же

Evgheni Чернявский
не должно, мы указываем providedIn: 'root' же

Тут нужна фабрика с общим сервисом и weekmap. В нее передавать класс и смотреть если создан отдавать, а если нет новый делать. Что-то типа такого

Evgheni Чернявский
ээм нет это module injector

В декораторп компонента element injector

Andrei
В декораторп компонента element injector

где ты чел увидел что я предлагаю в декоратор компонента регать?

Andrei
Вот

ну 10 раз еще раз перечитайте, ссылку откройте, я хз где вы это видите

Andrei
Чего вы такой агрессивный?

и агрессивность хз где видите

Похожие вопросы

Обсуждают сегодня

ого, прикольно, а что пишешь?
CodWiz | Серёжа by CodWiz
32
а почему бы не поведать миру эти дополнения, сделав их по сути стандартными для ide ?
Mixail Frolov
26
А как ребята типа теле2 зашли? У них же пополнение баланса моментальное
Alexandr Dubickiy
22
Нужно найти номер позиции, с которой начинается подстрока S2 в строке S1. lea di, s1 ;Строка lea si, s2 Подстрока again: mov al, [si] mov ah, 02 ...
Ыиу
11
Здравствуйте. Какое условие необходимо, что бы приложение скомпилированное лазарусом в ubuntu запускалось на astra linux?
Эдуард Щербаков
21
Привет Вам, Гуру вапора Смею обратиться с вопросом, по какой причине не сохраняются куки через request.client.send(get) и urlsession? Опишу чуть точнее: - есть первый запрос, ...
Alexander Orlov
10
В шоке. Как теперь делить целые числа в 64 бита, чтоб получился Double? function TGridToExcel.GetExcelGridRowHeight: integer; var f: Double; begin //GridRowHeight и Screen...
Катерина Свиридова
8
Подскажите с байтами 0d 0a (или CR/LF). Эти два байта встречаются в бинарных данных в случайных местах и создают смещение на один байт. Что можно сделать или как обработать э...
Basil Backend
9
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $Form_Gui = GUICreate("Мой GUI", 179, 74, 787, 525, $WS_POPUP) ; Создаёт окно в углу экрана (ширина свободн...
Макс
1
кстати, транк починили уже?
Igor
11
Карта сайта