Posso sim e ainda com um exemplo concreto. No quarto curso de Angular que será lançado, eu ensino a lidar com um gerenciador de error global. Ele precisa ser carregado antes que suas dependências sejam carregadas para que possa tratar qualquer erro de inicialização dessas dependências. Nesse sentido, não posso simplesmente injetar em seu constructor as dependências de que necessita, porque o Angular instanciará as dependências antes do GlobalErrorHandler. Nesse caso, eu faço a injeção na mão através do serviço Injector
no método handleError.
Segue o código resumido, mas completo no que diz respeito à injeção do Injector:
import { ErrorHandler, Injectable, Injector } from "@angular/core";
// importações omitidas
@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
// injetei o Injector
constructor(private injector: Injector) {}
handleError(error: any): void {
// usando o Injector para criar a instância para nós.
const userService = this.injector.get(UserService);
// código omitido
}
Isso é um caso muito específico dentro do framework. Agora, dentro da sua necessidade específica, você busca o que precisar e passar para o constructor da sua classe.
Sucesso e bom estudo!