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

Всем привет, скорее всего уже сто процентов заезжанная тема, но

попрошу хелпаните понять

Есть такая структура
(LazyModule естественно загружается через loadChildren)

— lazy
—— lazy.module
—— lazy.component
—— lazy.service
— app.component
— app.module

Я хочу понять как лучше запровайдить LazyService, самый наверное лучший вариант, который везде советуют это:

{ provideIn: root }

в таком случае я:
- не провайжу этот сервис в LazyModule
- если этот сервис никто не инжектирует, tree-shaking выкидывает его из бандла

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


и как бы вот это "но", меня вводит в ступор, зачем это нужно

я же могу просто запровайдить этот сервис в LazyModule, ведь я уверен, что он будет использоваться там всегда и не нужно tree-shaking'у его выбрасывать
и в этом случае, если кто-то попробует инжектировать его вылетит еррор и будет понятно, что не тот сервис заинжектили

почему бест практисес считается писать provideIn: root ?

3 ответов

26 просмотров

если тебе нужен инстанс, то в модуль, если нет в рут

Providein root - это патерн сингелтон Т.е. если у тебя есть сервис, он может или должен работать в единственном экземпляре, то зачем для него создавать кучу инстансов Например сервис для работы c ls И наоборот, у тебя есть сервис который специфичный, должен впрлнять что-то, что относится к одному компоненту или модулю В это случае, нет смысла его провайдить в рут

Hey 👋, i'm Samvel 🦊
если тебе нужен инстанс, то в модуль, если нет в р...

Не обязательно в модуль, можно запровайдить в компонент

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

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

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...
~
14
Недавно 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
Карта сайта