Passa al contenuto principale

Dependency Injection con inject()

Preferire la funzione inject() rispetto all'injection tramite parametri del constructor.

Vantaggi:

  • Funziona in contesti non-class (functional guards, resolvers, interceptor)
  • Non richiede decoratori
  • Più facile da refactorare e comporre

Uso nei componenti e servizi

import { inject } from '@angular/core';

@Component({ ... })
export class UserListComponent {
private readonly http = inject(HttpClient);
private readonly router = inject(Router);
private readonly userService = inject(UserService);
}

Uso in functional guards

export const authGuard: CanActivateFn = () => {
const auth = inject(AuthService);
const router = inject(Router);

if (auth.isLoggedIn()) {
return true;
}
return router.createUrlTree(['/login']);
};

Uso in interceptor funzionali

export const authInterceptor: HttpInterceptorFn = (req, next) => {
const token = inject(AuthService).getToken();

if (token) {
req = req.clone({
setHeaders: { Authorization: 'Bearer ' + token }
});
}
return next(req);
};

Injection token custom

const API_URL = new InjectionToken<string>('API_URL');

// Provider
provideHttpClient(),
{ provide: API_URL, useValue: 'https://api.example.com' }

// Consumo
private readonly apiUrl = inject(API_URL);