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

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

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

29 ответов

20 просмотров

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

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

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта