У меня есть провайдер фабрики, который вызывает метод службы. Этот сервис раньше был просто конкретным классом с одной реализацией и выглядел так:
export const appInitialiserFactory = (
environmentService: EnvironmentService
) => async () => {
await environmentService.load().toPromise();
};
export const appInitialiser = {
provide: APP_INITIALIZER,
useFactory: appInitialiserFactory,
deps: [
EnvironmentService
],
multi: true
};
Это работало нормально, пока мне не пришлось разделить EnvironmentService на 2 отдельные реализации, которые я назову Real и Mock (для тестирования). Это означает, что EnvironmentService, который ранее был классом, теперь превратился в интерфейс, который реализуют другие 2 класса. Для поддержки этого я создал модуль, который можно динамически загружать в зависимости от конфигурации приложения. Например, этот MockEnvironmentService выглядит следующим образом:
@NgModule({
providers: [
{ provide: 'ENVIRONMENT_SERVICE', useClass: MockEnvironmentService }
]
})
export class MockEnvironmentServiceModule { }
и настроен в модуле приложения следующим образом:
imports: [
...
environment.environmentModule,
...
],
Это отлично работает для других служб и компонентов, которые зависят от EnvironmentService тип, правильный сервис предоставляется на основе модулей. Но я не могу заставить это работать в фабричной функции. Я попытался внедрить в модуль в deps, но он не разрешает модуль (он просто дает модуль в качестве зависимости). Я также попытался удалить deps, чтобы увидеть, будет ли он автоматически разрешен, но это тоже не работает. Я не мог найти информацию о том, как это сделать. Можно ли это сделать с заводским провайдером? Если нет, то какая лучшая альтернатива для этого?