как условно использовать разные сервисы по deps и useValue в Angular 7? - PullRequest
0 голосов
/ 02 марта 2019

Здравствуйте. Я практикую сервисную функцию angular7 и хочу использовать различные сервисы по условию, почти как в Angular 4, если это среда DEV, использующая testservice3, в противном случае используйте testservice: enter image description here

Мой 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?

Большое вам спасибо за продвинутый уровень!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...