Я пытаюсь написать простой LoggerService
для углового 2. При вызове метода logger.log('msg')
этой службы регистратор должен автоматически префикс идентификатора класса вызывающего абонента. Итак, если звонок типа logger.log('hello')
сделан из MyComponent
, выход должен быть MyComponent: hello
.Ввести новый экземпляр службы в другой службе в угловом 2
Для этого я создал providerFactory и службу, как показано ниже:
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}`);
}
}
Это прекрасно работает при использовании с компонентом, используются, как показано ниже:
@Component({
templateUrl: 'myComponent.html',
providers: [provideLogger('MyComponent')]
})
export class MyComponent {
constructor(private logger: LoggerService){
logger.log('Hello'); //outputs: MyComponent: Hello
}
}
Проблемы я столкнулся вот что: я не могу вставить новый экземпляр этого 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
службы? Спасибо!
Просто FYI, это выглядит как самая последняя AngularCLI теперь встроенный в Logger: https://github.com/angular/angular-cli/commit/e3b48da – Rodney