Angular가 의존성 주입 중에 클래스의 의존 대상을 찾지 못하면 이 오류가 발생합니다. Angular가 매개변수 타입을 확인하기 위해 TypeScript 메타데이터에 의존하는 생성자 주입을 사용하는 클래스에서 가장 흔히 발생합니다.
가장 흔한 원인은 다음과 같습니다.
- 서비스 클래스에
@Service()또는@Injectable데코레이터가 없습니다. InjectionToken에 적절한 프로바이더 정의가 없습니다.- 생성자 매개변수의 의존 대상을 찾을 수 없습니다.
NOTE: inject() 함수는 명시적인 토큰을 받으므로 “매개변수의 의존 대상을 찾을 수 없음”이라는 상황이 직접 적용되지는 않습니다. 하지만 주입하는 클래스 자체에 @Service()가 없고 생성자 의존성이 있다면 이 오류가 발생할 수 있습니다.
흔히 발생하는 상황
누락된 @Service() 데코레이터
클래스에 생성자 의존성이 있지만 @Service() 데코레이터가 없으면 Angular는 매개변수의 의존 대상을 찾을 수 없습니다.
누락된 @Service() 데코레이터
export class UserClient {
constructor(private http: HttpClient) {} // Angular가 의존 대상을 찾을 수 없습니다.
}
이 문제를 해결하려면 @Service() 데코레이터를 추가하세요.
@Service()
export class UserClient {
constructor(private http: HttpClient) {}
}
의존 대상을 찾을 수 없는 생성자 매개변수
Angular가 생성자 매개변수의 타입을 확인할 수 없을 때도 이 오류가 발생합니다.
@Service()
export class DataStore {
// 프로바이더가 없으면 Angular가 'config'의 의존 대상을 찾을 수 없습니다.
constructor(private config: AppConfig) {}
}
모든 생성자 매개변수에 프로바이더를 설정하거나, 선택적인 의존성에는 @Optional()을 사용하세요.
오류 디버깅
오류 메시지에는 어떤 토큰의 의존 대상을 찾지 못했는지에 대한 정보가 포함됩니다.
Can't resolve all parameters for X: (?, ?, ?)에서?는 의존 대상을 찾을 수 없는 매개변수를 나타냅니다. 클래스에@Service또는@Injectable()이 있고 모든 의존성에 프로바이더가 있는지 확인하세요.Token X is missing a ɵprov definition은 프로바이더를 설정하지 않은InjectionToken을 사용했다는 뜻입니다.{provide: TOKEN, useValue: ...}로 토큰에 값을 등록하거나 토큰 정의에 기본 팩토리를 추가하세요.
오류의 스택 트레이스를 거슬러 올라가 문제가 있는 주입이 발생하는 위치를 찾고 다음 사항을 확인하세요.
- 클래스에
@Service또는@Injectable()데코레이터가 있는지 확인하세요. - 모든 생성자 매개변수에 프로바이더가 등록되어 있는지 확인하세요.
- 모든
InjectionToken에 프로바이더나 기본값이 설정되어 있는지 확인하세요.