는Angular2 Dependency Injection - 의미가 있습니까? 문서로
의존성 삽입 (Dependency Injection) 코드 종속성
을 관리하기위한 강력한 패턴이다 그러나 각도의 DI는 어떤 의미를 가지고 난데?
HeroComponent가 HeroModule에 있고 HeroService를 사용한다고 가정 해 보겠습니다. 유형을 추가
- 가져 오기 HeroService 또는 구성 요소의 매개 변수에 주입 서비스를 추가 : 는 우리가 가지고 HeroComponent에서 사용합니다.
왜 HeroComponent에 그냥
- 수입 HeroService합니까?
우리는 애플 리케이션 전체에 싱글 톤을 가질 수 있도록 인스턴스를 내보낼 수 있으며 테스트 중에 실제 구현 대신 모조를 가져올 수 있도록 webpack/karma를 구성 할 수 있습니다.
누군가 Angular의 DI를 사용하면 아키텍처가 밀접하게 결합되지 않지만 사실입니까? Angular 1.x에서는 실제로 생성자에서 params를 지정했습니다. 그러나 Angular2에서는 종속성을 추가로 가져와야하고 어디에서 지정해야합니다. 그렇다면 느슨하게 결합 된 부분은 어디입니까?
예 :
import { Http } from 'angular2/http';
export class Login {
constructor(http: Http) {
http.whatever()
}
}
우리의 주입을 실행할 수 있으려면, 우리는 그것을 가져올 수 있습니다. 그리고 우리가 수입 할 때, 우리는 정확히 어떤 서비스를 사용할 것인지를 정의합니다. 위와 아래의 예와 차이가 보이지 않습니다.
import { http } from 'angular2/http'; (instance)
export class Login {
constructor() {
http.whatever()
}}
그건 Angular2가 발명 한 것이 아닙니다. 그것은 인기있는 패턴이며 좋은 연습으로 간주됩니다 .https : //en.wikipedia.org/wiki/Inversion_of_control. http://stackoverflow.com/questions/3058/what-is-inversion-of-control, http://martinfowler.com/articles/injection.html –
물론, IoC는 인기있는 패턴이며 모범 사례입니다. 고체 원칙. 하지만 의존성을 수동으로 가져와야하는 경우에는 IoC가 아닙니다. –
TS에는 DI 용 인터페이스를 사용할 수 없지만 여전히 (추상) 기본 클래스 (Angular2 제한이 아닌 TS 제한)를 사용할 수있는 몇 가지 제한 사항이 있습니다. 그렇지 않으면 가져 오기가 IoC 주제와 관련이 없다고 생각합니다. 어떤 이유로 든 소스 코드에서 유형을 사용하려면 DI와 관련이없는 가져 오기가 필요합니다. –