Как внедрить параметр из одного сервиса в другой сервис в Angular - PullRequest
0 голосов
/ 04 мая 2020

У меня есть следующий сервис-оболочка для сторонней библиотеки хранения. Он принимает параметр конфигурации, который может отличаться в зависимости от таблицы хранения, которую мы хотим использовать:

@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,
        ) { }
...
...