У меня есть служба, которая реализует интерфейс IDatabase
и сохраняет данные с помощью Firebase (например).Я хотел, чтобы он был заменен другим сервисом, который будет реализовывать интерфейс IDatabase
(например, couchDb).И несколько служб репозитория (зависит от типа данных) будут использовать эту корневую службу БД.
Поэтому я решил использовать нестандартные угловые провайдеры:
Здесь я создал APP_DB Injection Token
, относящийся к интерфейсу IDatabase.
export const APP_DATA_DB = new InjectionToken<IDatabase>('app-data-delta-db');
Затем я использовал этот токен для объявления службы корневой БД, которая будет доступна во всех подмодулях приложения.
// app.module.ts:
@NgModule({
providers: [{ provide: APP_DB, useClass: AppDataFirebaseService }]
И водин из подмодулей (users-repository.module
) Я использовал также собственный провайдер для модуля репозитория, используя опцию useFactory
:
//users-repository.module.ts:
@NgModule({
providers: [
{ provide: USERS_REPOSITORY_SERVICE,
useFactory: (appDb: IDatabase, store: Store<any>) => {
return new VehicleRepositoryService(appDb, store),
deps: [APP_DB, Store]
}]
Но когда я смотрю на импорт в верхней части users-repository.module.tsЯ вижу, что я импортирую APP_DB из его файла, где находится сервис Firbase.
И вопрос , как я поменяю службу корневой БД на CouchDb
службу на useClass
в app.module.ts
, когда токен впрыска во всех подмодулях указывает на APP_DB из Firestore
службы?