O que angular-di faz?
Implemente injeção de dependência no Angular v20+ usando inject(), tokens de injeção e configuração de provedores. Use para arquitetura de serviços, fornecimento de dependências em diferentes níveis, criação de tokens injetáveis e gerenciamento de serviços singleton versus escopados. Dispara na criação de serviços, configuração de provedores, uso de tokens de injeção ou compreensão da hierarquia de DI.
Funcionalidades Principais
inject()function: Obter dependências diretamente em funções ou construtores, sem construtor explícito.InjectionToken: Criar tokens tipados para dependências não baseadas em classe.- Provedores: Configurar provedores em nível de módulo (
providedIn: 'root'), componente, diretiva ou rota. - Hierarquia de DI: Entender como o Angular resolve dependências na árvore de injeção.
- Escopo de Serviços: Gerenciar singleton (
providedIn: 'root') vs escopo de instância (providedIn: 'any'ou provedores por componente).
Exemplos de Uso
Injetação em um Serviço
import { Injectable, inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({ providedIn: 'root' })
export class DataService {
private http = inject(HttpClient);
getData() {
return this.http.get('/api/data');
}
}
Uso de InjectionToken
import { InjectionToken, inject } from '@angular/core';
export const API_URL = new InjectionToken<string>('API_URL');
export class ApiService {
private apiUrl = inject(API_URL);
fetch() {
return fetch(this.apiUrl);
}
}
Provedores em Componente
import { Component, inject } from '@angular/core';
import { LoggerService } from './logger.service';
@Component({
selector: 'app-child',
template: `<p>Child Component</p>`,
providers: [LoggerService] // nova instância do LoggerService para este componente
})
export class ChildComponent {
private logger = inject(LoggerService);
}
Quando Usar
- Criação de Serviços: Ao criar um novo serviço, use
inject()para obter dependências. - Provedores em Níveis Específicos: Configure provedores diretamente nos metadados do componente quando desejar um escopo limitado.
- Tokens de Injeção: Use
InjectionTokenpara dependências que não são classes (ex: strings, números, objetos de configuração). - Hierarquia de DI: Consulte este skill sempre que precisar entender por que uma dependência não está sendo resolvida ou qual serviço está sendo injetado.
Boas Práticas
- Prefira
providedIn: 'root'para serviços que devem ser singleton. - Use
inject()em vez de injeção via construtor para maior flexibilidade. - Documente tokens com
InjectionTokencom descrição clara. - Evite fornecer serviços em múltiplos níveis desnecessariamente para não confundir a resolução.
Repositório
Para mais informações, veja a documentação oficial do Angular sobre injeção de dependência.