Я пишу приложение 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, приложения пересекаются между двумя реализациями), но я не уверен, что это правильный способ получить такое поведение (определить интерфейс, а затем переключаться между двумя различными реальными реализации): в частности, я ожидал, что внутри провайдеров я должен вставить в свойство обеспечить интерфейс, а не реальную службу.
Есть предложения?