ドキュメントがAngular2 Dependency Injection - 理にかなっているか、それとも強化されていますか?
依存性の注入は
コードの依存関係を管理するための強力なパターンですが、角度のDIはどんな意味があるのでしょうか?言うように
HeroComponentがHeroModuleにあり、HeroServiceが使用されているとします。 HeroComponentでそれを使用するに 我々はする必要があります:モジュールプロバイダーでHeroModuleで
- インポートHeroService
- を注入HeroService
- HeroComponent でインポートHeroService
- タイプを追加またはコンポーネントのパラメータに注入されたサービスを追加します。
なぜ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は普及しているパターンであり、優れたプラクティスですソリッドの原則ただし、依存関係を手動でインポートする必要がある場合は、私にとっては不可能です。 –
TSにはDI用インターフェイスを使用できないが、引き続き(抽象)基本クラス(Angular2の制限ではなくTS制限)を使用できるという制限がいくつかあります。私はそれ以外の点ではIoCの話題にはまったく関連していないと思います。何らかの理由でソースコード内の型を使用したい場合は、DIに関連しない型をインポートする必要があります。 –