角度2の単純なLoggerService
を書こうとしています。このサービスのlogger.log('msg')
メソッドを呼び出すと、ロガーは自動的に呼び出し元クラスの識別子に接頭辞を付ける必要があります。 logger.log('hello')
のようなコールがMyComponent
から作成された場合、出力はMyComponent: hello
になります。角2の別のサービスで新しいサービスインスタンスを注入
そうするためには、私がproviderFactoryと以下のようにサービスを作成しました:
@Component({
templateUrl: 'myComponent.html',
providers: [provideLogger('MyComponent')]
})
export class MyComponent {
constructor(private logger: LoggerService){
logger.log('Hello'); //outputs: MyComponent: Hello
}
}
私が直面しています問題を:以下のように使用、コンポーネントを使用するとき
export function provideLogger(sourceClass: string) {
return {
provide: LoggerService,
useFactory: (config: LogConfig) => new LoggerService(sourceClass, config),
deps: ['LogConfig'] //LogConfig is a simple JS object common for application
};
}
@Injectable()
export class LoggerService {
constructor(private sourceClass:string, private config: LogConfig) { }
log(message: string) {
console.log(`${this.sourceClass}: ${message}`);
}
}
これは正常に動作しますここには:私はこのLoggerService
の新しいインスタンスを他のサービスに挿入できません(以下はサンプルApiServiceです)。私が理解しているように、インジェクターは、他のサービスを注入するためのサービスレベルでは利用できません。
@Injectable() //can't mentioned providerFunction
export class ApiService {
constructor(private logger: LoggerService) {
logger.log('hello api'); //should output ApiService: hello api
}
}
LoggerSerivceの新しいインスタンスを別の@Injectable
サービスにインジェクトする方法を教えてください。 ありがとう!
最近のAngularCLIには、LoggeRが組み込まれているようです。https://github.com/angular/angular-cli/commit/e3b48da – Rodney