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.