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 в тестах.