intermediate
Dependency injection
Понимайте providers, injectors, tokens, lifetime сервисов, tree-shakable providers и точки подмены в тестах.
DI Angular разрешает tokens через дерево injectors: platform → root → route/component. providers связывают token (class или `InjectionToken`) с factory, class или value.
| Scope | Lifetime | |-------|----------| | root (`providedIn: 'root'`) | Singleton приложения | | Component providers | Новый экземпляр на поддерево компонента | | Route providers | На lazy-loaded маршрут |
`inject()` в constructors, factories и полях. Тесты переопределяют providers через `TestBed.configureTestingModule`.
На интервью: иерархия injectors, почему два компонента получают разные instances, tree-shakable `providedIn`.
Типовые ошибки: ручной `new Service()`, неверный scope → stale state, непрозрачные tokens без интерфейсов.
Компромисс: гибкие деревья injectors против сложности отслеживания, какой компонент получает какой instance.
Чеклист:
- inject() и constructor injection.
- scope под lifetime состояния.
- InjectionToken для config.
- Override providers в тестах.