Здравствуйте. Я практикую сервисную функцию angular7 и хочу использовать различные сервисы по условию, почти как в Angular 4, если это среда DEV, использующая testservice3, в противном случае используйте testservice: ![enter image description here](https://i.stack.imgur.com/J9lAx.png)
Мой app.component.ts похож на это:
import { Component } from '@angular/core';
import { TestService } from './shared/test.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'DependencyInjectionNG';
constructor (private testService: TestService) {
this.testService.sayHello();
}
}
, и я создал test.service.ts:
import { Injectable } from '@angular/core';
import { LoggerService } from './logger.service';
@Injectable({
providedIn: 'root',
useFactory: xyzFactory,
deps: [LoggerService, 'IS_DEV_ENV'],
useValue: true
})
export class TestService {
constructor() {}
sayHello () {
console.log('This is test service');
}
}
export class TestService2 {
sayHello() {
console.log(`From TestService2 --> Hello`);
}
}
export class TestService3 {
constructor(public logService: LoggerService) {}
sayHello() {
this.logService.log('Message from logService');
console.log(`From TestService3 --> Hello`);
}
}
export function xyzFactory (logger: LoggerService, isDev: boolean) {
console.log(isDev);
if (isDev) {
return new TestService3(logger);
} else {
return new TestService();
}
}
logger.service.ts:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class LoggerService {
constructor() { }
log(message: string) {
console.log(message);
}
}
Однако я получил эту ошибку:
ОШИБКА TypeError: this.testService.sayHello не является функцией в новом AppComponent (app.component.ts: 13
Кто-нибудь знает, как использовать различные сервисы, используя useFactory и useValue?
Большое вам спасибо за продвинутый уровень!