Angular DI альтернативный класс провайдера правильное использование - PullRequest
0 голосов
/ 20 апреля 2020

Я пишу приложение Angular и пишу два разных сервиса: один реальный сервис, а другой фиктивный. Оба реализуют интерфейс.

//interface
export interface IService{/**/}

//mock 
@Injectable()
export class ServiceMock implements IService {/**/}

//concrete
@Injectable()
export class ServiceConcrete implements IService {/**/}

Затем в app.module.ts я добавил этот код для провайдеров:

providers: [
{provide:ServiceConcrete, useClass:ServiceMock }
],

Я ввел все компоненты, которые нуждаются в обслуживайте ServiceConcrete, и все работает идеально (переключая useClass между ServiceMock и ServiceConcrete, приложения пересекаются между двумя реализациями), но я не уверен, что это правильный способ получить такое поведение (определить интерфейс, а затем переключаться между двумя различными реальными реализации): в частности, я ожидал, что внутри провайдеров я должен вставить в свойство обеспечить интерфейс, а не реальную службу.
Есть предложения?

...