Skillshub angular-dependency-injection
Best practices for DI, inject() usage, and providers. Use when configuring Angular dependency injection, using inject(), or defining providers. (triggers: **/*.service.ts, angular inject, providedIn, injection token, provideAppInitializer)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/angular-dependency-injection" ~/.claude/skills/comeonoliver-skillshub-angular-dependency-injection && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/angular-dependency-injection/SKILL.mdsource content
Dependency Injection
Priority: P0 (CRITICAL)
Principles
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).inject()- 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
. Inject with: inject(API_URL).app.config.ts
Guidelines
- Providers: Prefer provide*() functions (e.g., provideHttpClient()) in
providers array over importing NgModules.app.config.ts - Factories: Use
strictly when dependencies need runtime configuration.useFactory - App Initializer: Use provideAppInitializer(() => inject(ConfigService).load()) (Angular 19+) to run async code before app bootstrap — replaces the old
token pattern.APP_INITIALIZER - Route Providers: Scope services to a route tree using providers: [MyService] in route config (the routes array) instead of
. This creates an instance destroyed when leaving the route.providedIn: 'root' - 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
: UseprovidedIn: 'platform'
scoping; reserve platform only for Micro Frontend sharing.'root' - No
: Refactor architecture to eliminate circular dependencies instead.forwardRef