Ich habe drei Dienste und eine Komponente:Angular 2 Injekt Komplex Dienst Dienst
root.service
abstarct-child.service
extend-child.service
app.component
Die root.service
einspritzt von Abhängigkeitsinjektion unter Verwendung von die abstarct-child.service
, etwa so:
import {Injectable} from 'angular2/core';
import {AbstractChildService} from './abstarct-child.service';
@Injectable()
export class RootService {
constructor(private _abstractChildService: AbstractChildService) {}
UseChildServiceDoSomethingFunction(){}
}
Die abstarct-child.service
sieht so aus:
import {Injectable} from 'angular2/core';
@Injectable()
export abstract class AbstractChildService {
abstract doSomething(): any ;
}
Die extend-child.service
sieht so aus:
import {Injectable} from 'angular2/core';
import {AbstractChildService} from './abstarct-child.service';
@Injectable()
export class ExtendChildService extends AbstractChildService{
constructor(private _num: number) { super(); }
doSomething() : any { return true; }
}
Die app.component
die root.service
und die extend-child.service
als bietet die abstract-child.service
so:
import {Component} from 'angular2/core';
import {Input} from 'angular2/core';
import {provide} from 'angular2/core';
import {RootService} from './root.service';
import {AbstractChildService} from './abstarct-child.service';
import {ExtendChildService} from './extend-child.service';
@Component({
selector: 'app',
providers: [provide(AbstractChildService, { useClass: ExtendChildService, useValue: this.num})]
})
export class AppComponent {
@Input('given_Num') num: number;
}
Ich mag würde wissen, wie kann ich das extend-child.service
ein Objekt, in diesem Fall der this.num
von app.component
injizieren?
Kann jemand finden, was ich falsch mache?
Danke.
Wie Sie sehen können, erhalten extend-child.service ein Number-Objekt durch Dependency-Injection, ich werde eine Nummer zu erweitern-child.service injizieren und dann extend-child.service zu root.service injizieren.vielleicht bin ich das ist ein schlechter weg, also wenn jemand weiß was es richtig ist? –
Wie in meiner Antwort erwähnt, können Sie eine Nummer nicht nur nach ihrem Typ eingeben. Für primitive Typen benötigen Sie einen Schlüssel, der sich vom Typ unterscheidet und '@Inject ('someKey')' zum Konstruktor-Parameter hinzufügt. Sonst wäre DI nicht in der Lage, zwischen den angegebenen "string" (number, boolean, ...) Werten zu unterscheiden. –
Nun, ich habe Ihre Antwort, das Problem ist, dass meine app.component den num param injizieren muss, wenn der num param in app.component injiziert wird. –