Hata Ansiklopedisi

Yanlış bağlamda EnvironmentProviders

Bu hata, EnvironmentProviders yalnızca normal sağlayıcıları kabul eden bir bağlamda (örneğin bir bileşenin providers dizisi) kullanıldığında oluşur. Ortam sağlayıcıları uygulama genelinde yapılandırma için tasarlanmıştır ve yalnızca ortam injector'larında (bootstrapApplication içinde yapılandırılan kök injector veya rota yapılandırmaları gibi) kullanılabilir.

Yaygın senaryolar

Bileşen sağlayıcılarında provideHttpClient() kullanımı

provideHttpClient() gibi fonksiyonlar EnvironmentProviders döndürür ve bileşen düzeyinde kullanılamaz:

@Component({
  providers: [
    provideHttpClient(), // HATA: EnvironmentProviders burada kullanılamaz
  ],
})
export class UserProfile {}

Bileşen sağlayıcılarında importProvidersFrom() kullanımı

importProvidersFrom() fonksiyonu da EnvironmentProviders döndürür:

@Component({
  providers: [
    importProvidersFrom(SomeModule), // HATA: bileşen sağlayıcıları için kullanılamaz
  ],
})
export class DataView {}

Hatayı ayıklama

Ortam sağlayıcılarını uygun bir konuma taşıyın:

Uygulama geneli sağlayıcılar için

Ortam sağlayıcılarını bootstrapApplication içinde yapılandırın:

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

Rotaya özgü sağlayıcılar için

Rota yapılandırmalarında providers dizisini kullanın:

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

Bileşen düzeyinde servisler için

Bileşen kapsamında servislere ihtiyacınız varsa, ortam sağlayıcıları yerine normal sağlayıcılar kullanın:

@Component({
  providers: [
    UserClient, // Normal sağlayıcı - bu çalışır
    {provide: API_URL, useValue: '/api'}, // Değer sağlayıcı - bu çalışır
  ],
})
export class UserProfile {}

Hata mesajı soruna neden olan sağlayıcıyı belirtir. Bileşeninizin providers dizisindeki tüm öğelerin provideHttpClient(), provideRouter() veya importProvidersFrom() gibi fonksiyonlar tarafından döndürülen ortam sağlayıcıları değil, normal sağlayıcılar olduğunu kontrol edin.