Você vê este erro quando tenta usar a função inject fora do contexto de injeção permitido. O contexto de injeção está disponível durante a criação e inicialização da classe. Também está disponível para funções usadas com runInInjectionContext.
Na prática, as chamadas inject() são permitidas em um constructor, um parâmetro de constructor e um inicializador de campo:
@Injectable({providedIn: 'root'})export class Car { radio: Radio|undefined; // OK: inicializador de campo spareTyre = inject(Tyre); constructor() { // OK: corpo do constructor this.radio = inject(Radio); }}
Também é legal chamar inject de uma factory de provider:
providers: [ {provide: Car, useFactory: () => { // OK: uma factory de classe const engine = inject(Engine); return new Car(engine); }}]
Chamadas à função inject fora da criação da classe ou runInInjectionContext resultarão em erro. Notavelmente, chamadas a inject() não são permitidas após uma instância de classe ser criada, em métodos (incluindo lifecycle hooks):
@Component({ ... })export class CarComponent { ngOnInit() { // ERRO: muito tarde, a instância do component já foi criada const engine = inject(Engine); engine.start(); }}
Depurando o erro
Trabalhe de trás para frente a partir do stack trace do erro para identificar um local onde a chamada não permitida a inject() está localizada.
Para corrigir o erro, mova a chamada inject para um local permitido (geralmente um constructor de classe ou um inicializador de campo).
NOTA: Se você está executando em um contexto de teste, TestBed.runInInjectionContext permitirá que inject() seja bem-sucedido.
TestBed.runInInjectionContext(() => { // ...});