2016-11-17 6 views
0

私はお互いを呼び出すサービスのレベルが少なく、を使用するComponentServiceErrorServiceです。別のサービスのためのサービスの注入

ここで、コンポーネントサービスの1つは、で使用されているErrorServiceインスタンスが、たとえば次のように指定する必要があります。 SpecialErrorServiceタイプ。 - ErrorServiceまたはSpecialErrorServiceは直接使用しません。

インスタンス化するときに正しいErrorService型を挿入するようにデータサービスに指示するにはどうすればよいですか?サービスを提供する場合

@Injectable() 
export class SpecialComponentService { 
    constructor(private _dataService: DataService){} 

    log() { 
    //expecting this to log: I'm a special error service 
    this._dataService.log(); 
    } 
} 

@Injectable() 
export class RegularComponentService { 
    constructor(private _dataService: DataService){} 

    log() { 
    //expecting this to log: I'm a regularerror service 
    this._dataService.log(); 
    } 
} 

@Injectable() 
export class DataService { 
    constructor(private _errorService: ErrorService){} 

    log() { 
    this._errorService.log(); 
    } 
} 


@Injectable() 
export class ErrorService { 
    log(){ 
    console.log("I'm a regular error service"); 
    } 
} 

@Injectable() 
export class SpecialErrorService extends ErrorService { 
    log(){ 
    console.log("I'm a special error service"); 
    } 
} 
+0

達成しようとしていることを示すコードを追加してください。 –

+0

なぜ、単にConsoleErrorService型のコンストラクタパラメータを作るだけではないのですか? –

+0

@GünterZöchbauer - 私は、通常の動作と特別な動作の両方に対して、まったく同じDataServiceを使用します。 – SWeko

答えて

0

あなたは特別なサービスでそれを置き換えることができます(ない一般的なケースとして、私は唯一の特定ComponentServiceこのbehavourを望んでいることに注意してください)。あなたはコンポーネント内でそれを使用する場合 はたとえば、あなたはこのようにそれを提供することができます。

{提供:ErrorService、useClass:SpecialErrorService}

PS:私はコメントとしてこれを投稿したかったが、私は許しませんよに。私は50の評判が必要だと言う...

関連する問題