Можно ли динамически изменить реализацию Сервиса в Angular? - PullRequest
0 голосов
/ 23 мая 2019

Я передаю реферат DataService, который, вероятно, будет иметь несколько реализаций.Я хочу иметь реализацию, которая использует LocalStorage в качестве бэкэнда, в основном для тестирования, и, возможно, бэкэнд Google и Facebook для хранения данных моего приложения:

@Injectable({
  providedIn: 'root'
})
abstract class DataService {
  abstract get(token: string): Observable<any>
  abstract set(token:string, data: any): void
}

@Injectable({
  providedIn: 'root'
})
export class LocalDataService implements DataService {

  constructor() {}

  get(token: string): Observable<string> {
    return of(localStorage.getItem(token));
  }

  set(token: string, data: string): void {
    localStorage.setItem(token, data);
  }
}

@Injectable({
  providedIn: 'root'
})
export class GDriveDataService implements DataService {...}

@Injectable({
  providedIn: 'root'
})
export class FacebookDataService implements DataService {...}

Моя проблема в том, что я могу знать только, какую реализациюиспользовать после входа пользователя в систему с учетной записью Google или Facebook.

Можно ли переключить предоставленную реализацию Службы после загрузки приложения?Нужно ли использовать другой подход?

...