是否可以在Angular中动态更改服务的实现?

时间:2019-05-23 07:10:21

标签: angular angular-services

我拥有一个抽象的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帐户登录后,我才能知道要使用哪种实现。

启动应用程序后,是否可以切换服务的提供的实施方式?我需要采取其他方法吗?

0 个答案:

没有答案