PassFront
  1. PassFront
  2. База знаний
  3. Внедрение зависимостей

Что делает providedIn: 'root' и как устроена иерархия инжекторов в Angular?

Внедрение зависимостей

`providedIn: 'root'` регистрирует сервис в корневом инжекторе, и в приложении создаётся один его экземпляр (singleton).

Как это выглядит

@Injectable({ providedIn: 'root' })
export class AuthService {
  private http = inject(HttpClient);
}

Сервис доступен везде, и при отсутствии использования его удаляет tree shaking.

Иерархия

Инжекторы образуют дерево: корневой, инжекторы маршрутов и инжекторы компонентов. Angular ищет зависимость вверх по дереву, начиная с ближайшего.

@Component({
  selector: 'app-editor',
  providers: [EditorStateService],  // свой экземпляр на каждый компонент
})
export class EditorComponent {}

Так получают отдельное состояние для каждого экземпляра компонента.

Модификаторы

@Optional(), @Self(), @SkipSelf(), @Host() управляют поиском, а inject(Token, { optional: true }) делает то же функционально.

Коротко для собеседования

providedIn: 'root' делает сервис синглтоном. Ограничить область можно providers в компоненте или маршруте, поиск идёт вверх по дереву инжекторов.

Другие вопросы раздела