У меня есть следующий сервис-оболочка для сторонней библиотеки хранения. Он принимает параметр конфигурации, который может отличаться в зависимости от таблицы хранения, которую мы хотим использовать:
@Injectable()
export class LocalStorageService {
store: Storage;
constructor(storeConfig: StorageConfig) {
this.store = new Storage(storeConfig);
}
keys(): Promise<any[]> {
return this.store.keys();
}
...
}
Теперь я хочу использовать эту службу в другой службе
export class AuthService {
constructor(
public store: LocalStorageService,
private router: Router,
) { }
...
}
Что такое лучший способ передать что-то вроде AuthStorageConfig в качестве параметра в LocalStorageService из моего AuthService?
export const AuthStorageConfig = {
...DefaultStorageConfig,
storeName: 'auth',
} as StorageConfig;
export const SyncStorageConfig = {
...DefaultStorageConfig,
storeName: 'sync',
} as StorageConfig;
В настоящее время я справился с этим, используя метод useFactory, но у меня возникли проблемы с попыткой насмешки зависимость LocalStorageService в тестах, поэтому я бы предпочел не использовать метод useFactory, если я что-то упустил и мне нужно его использовать.
@Injectable({
providedIn: 'root',
useFactory: (router: Router) => new AuthService(
new LocalStorageService(AuthStorageConfig),
router
),
deps: [Router]
})
export class AuthService {
constructor(
public store: LocalStorageService,
private router: Router,
) { }
...