サービスをコンポーネントに注入する必要があります。これらのすべては、以下の例に示すようにapp.moduleで指定されています。@NgModule、@Injectable @Componenet:依存性注入とコードの再利用
私の現在の理解は、角度依存性注入は、インターフェイスではなくクラスでのプログラミングをサポートしていることです。
例:私は2つのサービスを持っています。 DogServiceとCatServiceの両方がAnimalServiceInferfaceを実装しています。
export interface AnimalServiceInferface {
makeSound(): String;
}
@Injectable()
export class DogService implements AnimalServiceInferface {
makeSound(): String {
return "Woof";
}
}
@Injectable()
export class CatService implements AnimalServiceInferface {
makeSound(): String {
return "Woof";
}
}
が、私はその後、その後、この
@NgModule({
imports: [
APP_ROUTES,
BrowserModule
],
declarations: [
AnimalComponent
],
providers: [
CatService,
DogService
],
bootstrap: [
AppComponent
]
})
ように私の@NgModuleを配線し、私のコンポーネントで私はこのような2つのサービスのいずれか1つの使用をする必要があります。
@component()
export class AnimalComponent implements OnInit {
animalSound: string;
constructor(animalService: AnimalServiceInferface) {
}
onInit() {
this.animalSound = animalService.makeSound();
}
}
私のアプリケーションは、両方のAnimalServiceInferfaceの実装を使用することができますが、使用される実装は、状況によって決定されるように、どのように私はこれを配線します。例えば、これは、特定のルートまたは異なるコンポーネント構成に基づいて決定することができる。
感謝
JT
ありがとうございました。ただし、同じコンポーネントを使用する2つの別個のルートが1つのルートでCatServiceを使用し、もう1つのルートでDogServiceをどのように使用できるかは明確に説明されていません。これはできますか? –
あなたはこのルートごとに制御することはできません(少なくとも私は現在の方法を考えることはできません)が、あなたのケースでは動作するかもしれないし、動作しないかもしれない親コンポーネント毎にこれを制御することができます。プロバイダはコンポーネント(「プロバイダ」に追加されたとき)でハードコードされ、その子孫のすべてがそれ自身の「プロバイダ」リストでこれを上書きしない限り、このプロバイダからインスタンスを取得します。 –
ありがとうございます。だから、このアイディアの本当の力は失われているようです。私が見ることができる唯一の作業は、メインコンポーネントをサブクラス化する(空の)コンポーネントを作成することです。 uurrghhh ....理想的ではない。 –