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

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

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

29 ответов

3 просмотра

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

🇺🇦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
Чего вы такой агрессивный?

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

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

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

С ОС как и с искусственным интеллектом есть проблема определения. Вот мы спорим, а кто может ввести определение?
Marek Kotovsky
53
Вот представим, что человек реально считает bare bones за ОС, и хочет её использовать. Вряд ли он будет брать современный ПК, но что ему делать, чтобы не переплатить? Предста...
КТ315
18
Какой способ лучше для передачи двухмерного массива в функцию? Я не замечал что есть разница передачи динамического и статического массива 😁. С первым можно так func(int **arr...
007
32
а на что от эпл надо его положить, шоб он зарядился ?
Oleh Nerzh
17
Ты либу в либу, что-ли, линканул?
Роман Лях (rgreat)
16
И вот теперь возникает вопрос, у кого правильно? Правильно ли в самой либе, которая идет во всех линях, или блин в исходном коде этой либы? :))))))))))))
Александр (Rouse_) Багель
15
есть байтики, которые бегут по сети или через юниксовый сокет. их надо специфическим образом обрабатывать, парсить в рекорды, представляющие собой соответвующую версию протоко...
The Zazaeil
5
как разделить struc да две части? тип я пытался так: macro STRUCT sname { macro END \{ \\} purge MEMBER \} macro MEMBER line& \{ match nam...
Chapmann Chapmann
6
ну вот условно код класса: CLASS str c_str: int length: int METHOD __init__(this, c_str) mov rax, c_str mset this->c_str, rax mov rax, st...
Chapmann Chapmann
10
@MrMiscipitlick Это ближе к решению? macro END { } macro segment line& { if line eq flat segment readable writeable executable else segment line ...
Chapmann Chapmann
1
Карта сайта