Enciclopédia de Erros

inject() deve ser chamado de um contexto de injeção

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(() => {   // ...});