> angular-dependency-injection
Configure DI, inject() usage, and providers in Angular. Use when configuring Angular dependency injection, using inject(), or defining providers. (triggers: **/*.service.ts, angular inject, providedIn, injection token, provideAppInitializer)
curl "https://skillshub.wtf/HoangNguyen0403/agent-skills-standard/angular-dependency-injection?format=md"Dependency Injection
Priority: P0 (CRITICAL)
Principles
inject()over Constructor: Use the inject(MyService) function in class fields or constructor-equivalent class positions for cleaner injection. It works in any injection context (class fields, factory functions, guards).- Tree Shaking: Always use @Injectable({ providedIn: 'root' }) for app-wide singletons unless specific scoping is required.
- Tokens: Use new InjectionToken<T>('description') for configuration, primitives, or interface abstraction. Provide via: { provide: API_URL, useValue: 'https://api.example.com' } in
app.config.ts. Inject with: inject(API_URL).
Guidelines
- Providers: Prefer provide*() functions (e.g., provideHttpClient()) in
app.config.tsproviders array over importing NgModules. - Factories: Use
useFactorystrictly when dependencies need runtime configuration. - App Initializer: Use provideAppInitializer(() => inject(ConfigService).load()) (Angular 19+) to run async code before app bootstrap — replaces the old
APP_INITIALIZERtoken pattern. - Route Providers: Scope services to a route tree using providers: [MyService] in route config (the routes array) instead of
providedIn: 'root'. This creates an instance destroyed when leaving the route. - Multi Providers: Use { provide: TOKEN, useClass: Impl, multi: true } to collects all multi providers into an array (e.g., HTTP_INTERCEPTORS, validators).
Anti-Patterns
- No
providedIn: 'platform': Use'root'scoping; reserve platform only for Micro Frontend sharing. - No
forwardRef: Refactor architecture to eliminate circular dependencies instead.
References
> related_skills --same-repo
> common-store-changelog
Generate user-facing release notes for the Apple App Store and Google Play Store by collecting git history, triaging user-impacting changes, and drafting store-compliant changelogs. Enforces character limits (App Store ≤4000, Google Play ≤500), tone, and bullet format. Use when generating release notes, app store changelog, play store release, what's new, or version release notes for any mobile app. (triggers: generate changelog, app store notes, play store release, what's new, release notes, ve
> golang-tooling
Go developer toolchain — gopls LSP diagnostics, linting, formatting, and vet. Use when setting up Go tooling, running linters, or integrating gopls with Claude Code. (triggers: gopls, golangci-lint, golangci.yml, go vet, goimports, staticcheck, go tooling, go lint)
> common-ui-design
Design distinctive, production-grade frontend UI with bold aesthetic choices. Use when building web components, pages, interfaces, dashboards, or applications in any framework (React, Next.js, Angular, Vue, HTML/CSS). (triggers: build a page, create a component, design a dashboard, landing page, UI for, build a layout, make it look good, improve the design, build UI, create interface, design screen)
> common-owasp
OWASP Top 10 audit checklist for Web Applications (2021) and APIs (2023). Load during any security review, PR review, or codebase audit touching web, mobile backend, or API code. (triggers: security review, OWASP, broken access control, IDOR, BOLA, injection, broken auth, API review, authorization, access control)