analogjs/angular-di

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.

O que é angular-di?

Este skill fornece orientação detalhada sobre como implementar injeção de dependência (DI) no Angular versão 20 ou superior. Ele cobre o uso da função `inject()`, criação e uso de tokens de injeção (`InjectionToken`), e configuração de provedores (`providers`) em diferentes níveis da aplicação (módulo, componente, diretiva, rota). O skill é acionado quando o desenvolvedor precisa criar novos serviços, configurar provedores, entender a hierarquia de DI (quando uma dependência é resolvida) ou implementar padrões como singleton versus escopo de instância (ex: `providedIn: 'root'` vs `providedIn: 'any'`). A documentação inclui exemplos práticos de código, boas práticas para arquitetura de serviços modulares e reutilizáveis, e explicações sobre o sistema de injeção hierárquico do Angular. É útil para desenvolvedores que trabalham com Angular moderno e desejam estruturar suas aplicações de forma escalável e testável.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/analogjs/angular-skills/tree/main/skills/angular-di

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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 InjectionToken para 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 InjectionToken com 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.

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

analogjs/angular-component

Create modern Angular standalone components following v20+ best practices. Use for building UI components with signal-based inputs/outputs, OnPush change detection, host bindings, content projection, and lifecycle hooks. Triggers on component creation, refactoring class-based inputs to signals, adding host bindings, or implementing accessible interactive components.

analogjs/angular-directives

Create custom directives in Angular v20+ for DOM manipulation and behavior extension. Use for attribute directives that modify element behavior/appearance, structural directives for portals/overlays, and host directives for composition. Triggers on creating reusable DOM behaviors, extending element functionality, or composing behaviors across components. Note - use native @if/@for/@switch for control flow, not custom structural directives.

analogjs/angular-forms

Build signal-based forms in Angular v21+ using the new Signal Forms API. Use for form creation with automatic two-way binding, schema-based validation, field state management, and dynamic forms. Triggers on form implementation, adding validation, creating multi-step forms, or building forms with conditional fields. Signal Forms are experimental but recommended for new Angular projects. Don't use for template-driven forms without signals or third-party form libraries like Formly or ngx-formly.

analogjs/angular-http

Implement HTTP data fetching in Angular v20+ using resource(), httpResource(), and HttpClient. Use for API calls, data loading with signals, request/response handling, and interceptors. Triggers on data fetching, API integration, loading states, error handling, or converting Observable-based HTTP to signal-based patterns.

analogjs/angular-routing

Implement routing in Angular v20+ applications with lazy loading, functional guards, resolvers, and route parameters. Use for navigation setup, protected routes, route-based data loading, and nested routing. Triggers on route configuration, adding authentication guards, implementing lazy loading, or reading route parameters with signals.

analogjs/angular-signals

Implement signal-based reactive state management in Angular v20+. Use for creating reactive state with signal(), derived state with computed(), dependent state with linkedSignal(), and side effects with effect(). Triggers on state management questions, converting from BehaviorSubject/Observable patterns to signals, or implementing reactive data flows.

analogjs/angular-ssr

Implement server-side rendering and hydration in Angular v20+ using @angular/ssr. Use for SSR setup, hydration strategies, prerendering static pages, and handling browser-only APIs. Triggers on SSR configuration, fixing hydration mismatches, prerendering routes, or making code SSR-compatible.

analogjs/angular-testing

Write unit and integration tests for Angular v20+ applications using Vitest or Jasmine with TestBed and modern testing patterns. Use for testing components with signals, OnPush change detection, services with inject(), and HTTP interactions. Triggers on test creation, testing signal-based components, mocking dependencies, or setting up test infrastructure. Don't use for E2E testing with Cypress or Playwright, or for testing non-Angular JavaScript/TypeScript code.

analogjs/angular-tooling

Use Angular CLI and development tools effectively in Angular v20+ projects. Use for project setup, code generation, building, testing, and configuration. Triggers on creating new projects, generating components/services/modules, configuring builds, running tests, or optimizing production builds. Don't use for Nx workspace commands, custom Webpack configurations, or non-Angular CLI build systems like Vite standalone or esbuild direct usage.

Habilidades Relacionadas