이 스키매틱은 변환 가능한 @Injectable 클래스를 @Injectable({providedIn: 'root'})의 편리한 축약형인 @Service 데코레이터로 변환합니다. v22.1부터 사용할 수 있으며 안전하게 마이그레이션할 수 있다고 판단한 클래스만 변환합니다.
다음 명령어로 스키매틱을 실행하세요.
ng generate @angular/core:service
providedIn: 'root'로 선언한 클래스는 옵션 없는 @Service로 변환됩니다.
이전
import {Injectable} from '@angular/core';
@Injectable({providedIn: 'root'})
export class MyService {}
이후
옵션 없이 선언한 클래스는 자동으로 제공되지 않으므로 마이그레이션은 autoProvided: false로 기존 동작을 유지합니다. 이전과 마찬가지로 직접 providers 배열에 추가해야 합니다.
이전
import {Injectable} from '@angular/core';
@Injectable()
export class MyService {}
이후
자세한 내용은 자동 제공 비활성화하기를 참고하세요.
설정 옵션
--path
기본적으로 마이그레이션은 테스트 파일을 포함한 Angular CLI 워크스페이스 전체를 갱신합니다. 이 옵션으로 특정 하위 디렉터리만 마이그레이션할 수 있습니다.
ng generate @angular/core:service --path src/app/sub-component
제한 사항
애플리케이션의 동작을 깨뜨리지 않도록 다음에 해당하는 클래스는 건너뜁니다.
- 클래스 또는 생성자를 정의한 사용자 소스의 가장 가까운 상위 클래스가 생성자로 의존성을 주입하는 경우.
@Injectable데코레이터에providedIn이외의 옵션이 있는 경우.providedIn옵션이'root'이외의 값인 경우.
파일의 모든 @Injectable이 마이그레이션되면 Injectable 임포트를 제거합니다. 마이그레이션한 클래스와 건너뛴 클래스가 함께 있는 파일에서는 두 임포트를 모두 유지합니다.
마이그레이션할 파일을 찾지 못했다고 보고하면 어떤 파일도 변경하지 않은 것입니다. 변환할 수 있는 @Injectable 클래스가 없거나 이미 마이그레이션된 코드입니다. 가장 흔한 제외 원인은 생성자 주입입니다. 먼저 inject 함수로 마이그레이션한 뒤 이 마이그레이션을 다시 실행할 수 있습니다.