попрошу хелпаните понять
Есть такая структура
(LazyModule естественно загружается через loadChildren)
— lazy
—— lazy.module
—— lazy.component
—— lazy.service
— app.component
— app.module
Я хочу понять как лучше запровайдить LazyService, самый наверное лучший вариант, который везде советуют это:
{ provideIn: root }
в таком случае я:
- не провайжу этот сервис в LazyModule
- если этот сервис никто не инжектирует, tree-shaking выкидывает его из бандла
но:
- я могу инжектировать этот сервис везде в приложении, и по моей логике это наверное не правильно, что можно вызвать что-то из другого модуля, если оно конечно не считается общим сервисом
и как бы вот это "но", меня вводит в ступор, зачем это нужно
я же могу просто запровайдить этот сервис в LazyModule, ведь я уверен, что он будет использоваться там всегда и не нужно tree-shaking'у его выбрасывать
и в этом случае, если кто-то попробует инжектировать его вылетит еррор и будет понятно, что не тот сервис заинжектили
почему бест практисес считается писать provideIn: root ?
если тебе нужен инстанс, то в модуль, если нет в рут
Providein root - это патерн сингелтон Т.е. если у тебя есть сервис, он может или должен работать в единственном экземпляре, то зачем для него создавать кучу инстансов Например сервис для работы c ls И наоборот, у тебя есть сервис который специфичный, должен впрлнять что-то, что относится к одному компоненту или модулю В это случае, нет смысла его провайдить в рут
Не обязательно в модуль, можно запровайдить в компонент
Обсуждают сегодня