Внести вклад
Энциклопедия ошибок

EnvironmentProviders использован в неверном контексте

Эта ошибка возникает, когда EnvironmentProviders используются в контексте, принимающем только обычные провайдеры, например в массиве providers компонента. Провайдеры среды предназначены для конфигурации уровня приложения и могут использоваться только в инжекторах среды (таких как корневой инжектор, настроенный в bootstrapApplication, или конфигурации маршрутов).

Распространенные сценарии

Использование provideHttpClient() в провайдерах компонента

Функции вроде provideHttpClient() возвращают EnvironmentProviders, которые нельзя использовать на уровне компонента:

@Component({
  providers: [
    provideHttpClient(), // ОШИБКА: EnvironmentProviders нельзя использовать здесь
  ],
})
export class UserProfile {}

Использование importProvidersFrom() в провайдерах компонента

Функция importProvidersFrom() также возвращает EnvironmentProviders:

@Component({
  providers: [
    importProvidersFrom(SomeModule), // ОШИБКА: нельзя использовать в провайдерах компонента
  ],
})
export class DataView {}

Отладка ошибки

Переместите провайдеры среды в подходящее место:

Для провайдеров уровня приложения

Настройте провайдеры среды в bootstrapApplication:

bootstrapApplication(App, {
  providers: [provideHttpClient(), importProvidersFrom(SomeModule)],
});

Для провайдеров конкретного маршрута

Используйте массив providers в конфигурации маршрутов:

const routes: Routes = [
  {
    path: 'admin',
    component: AdminView,
    providers: [provideHttpClient(withInterceptors([authInterceptor]))],
  },
];

Для сервисов уровня компонента

Если вам нужны сервисы с областью видимости компонента, используйте обычные провайдеры вместо провайдеров среды:

@Component({
  providers: [
    UserClient, // Обычный провайдер — работает
    {provide: API_URL, useValue: '/api'}, // Провайдер значения — работает
  ],
})
export class UserProfile {}

Сообщение об ошибке указывает, какой именно провайдер вызвал проблему. Убедитесь, что все элементы в массиве providers вашего компонента являются обычными провайдерами, а не провайдерами среды, возвращаемыми такими функциями, как provideHttpClient(), provideRouter() или importProvidersFrom().