Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
oguzhan18 avatar

Angular Di

  • 173 installs
  • 6 repo stars
  • Updated April 4, 2026
  • oguzhan18/angular-ecosystem-skills

Implementing, refactoring, or debugging Angular dependency injection: providers, injectors, tokens, hierarchical scopes, and standalone bootstrap patterns.

About

Guides Angular dependency injection from basic inject() usage through advanced provider trees, InjectionToken design, and testable service wiring for production apps.

  • Provider and injector hierarchy patterns
  • InjectionToken and custom provider recipes
  • Standalone vs NgModule DI setup
  • Testing doubles and mock providers
  • Avoiding circular dependency pitfalls

Angular Di by the numbers

  • 173 all-time installs (skills.sh)
  • +1 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #913 of 2,245 Frontend Development skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oguzhan18/angular-ecosystem-skills --skill angular-di

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs173
repo stars6
Last updatedApril 4, 2026
Repositoryoguzhan18/angular-ecosystem-skills

What it does

Implementing, refactoring, or debugging Angular dependency injection: providers, injectors, tokens, hierarchical scopes, and standalone bootstrap patterns.

Files

SKILL.mdMarkdownGitHub ↗

Angular Dependency Injection

Version: Angular 21 (2025) Tags: DI, Services, Providers, Tokens, inject()

References: DI GuideAPIinject()

API Changes

This section documents recent version-specific API changes.

  • NEW: Functional injection with inject() — Preferred over constructor injection in modern Angular source
  • NEW: inject() with Optional decorator — inject(Service, { optional: true })
  • NEW: inject() with SkipSelf — inject(Service, { skipSelf: true })
  • NEW: Tree-shakable InjectionToken — new InjectionToken<T>(desc, { providedIn: 'root' })

Best Practices

  • Use providedIn: 'root' for singleton services
@Injectable({ providedIn: 'root' })
export class LoggerService {
  log(message: string) { console.log(message); }
}
  • Use inject() function for cleaner code
@Component({})
export class MyComponent {
  private service = inject(MyService);
  private router = inject(Router);
}
  • Use InjectionToken for non-class dependencies
export const API_URL = new InjectionToken<string>('apiUrl');

providers: [
  { provide: API_URL, useValue: 'https://api.example.com' }
]

constructor(@Inject(API_URL) private apiUrl: string) {}
  • Use factory providers for complex instantiation
providers: [
  {
    provide: AuthService,
    useFactory: (http: HttpClient, config: AppConfig) => {
      return new AuthService(http, config.apiUrl);
    },
    deps: [HttpClient, APP_CONFIG]
  }
]
  • Use multi providers for multiple implementations
providers: [
  { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
  { provide: HTTP_INTERCEPTORS, useClass: LogInterceptor, multi: true }
]
  • Use @Optional for optional dependencies
constructor(@Optional() private logger: LoggerService) {
  this.logger?.log('Optional dependency');
}
  • Use @SkipSelf to avoid self-injection
constructor(@SkipSelf() @Optional() private parent: ParentService) {}
  • Use forwardRef for circular dependencies
constructor(@Inject(forwardRef(() => ParentService)) private parent: ParentService) {}
  • Use hierarchical injectors for scoping
// Component-level provider
@Component({
  providers: [MyService]
})
export class MyComponent {}

// Lazy-loaded module provider
@Injectable({ providedIn: MyModule })
export class MyService {}
  • Use interface injection pattern
export interface CacheInterface {
  get(key: string): any;
}

export const CACHE_TOKEN = new InjectionToken<CacheInterface>('cache');
  • Use providedIn: 'any' for lazy-loaded services
@Injectable({ providedIn: 'any' })
export class LazyService {}

Related skills

Frontend Developmentfrontendbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.