Я хочу использовать FactoryProvider , который получает выбирает реализацию службы на основе текущего URI.
Кроме того, одна из реализаций должна реагировать на параметры маршрута (как определено route/:parameter
).
Как показано ниже, я подписываюсь на изменения. К сожалению, я не могу получить доступ к параметрам таким образом.Компонент, который создается в основной розетке маршрутизатора, может получить к ним доступ, но FactoryProvider не может.
Есть что-то, что я мог пропустить?
код модуля (сокращенно для улучшения читаемости)
@NgModule({
declarations: [],
imports: [],
exports: [],
providers: [XServiceProvider],
entryComponents: []})
Фабричный поставщик
export const XServiceProvider = {
provide: XService,
useFactory: XServiceFactory,
deps: [Http, HttpService, ConfigurationService, DatePipe, Router, ActivatedRoute]
};
const XServiceFactory = (http: Http,
httpService: HttpService,
configuration: ConfigurationService,
datePipe: DatePipe,
router: Router,
activatedRoute: ActivatedRoute) => {
const useAlternateImpplementation= router.url.startsWith('/mg/');
if (useAlternateImpplementation === true) {
const service = new XyService(http, httpService, configuration, datePipe);
for (const child of activatedRoute.root.children) {
if (child.outlet === PRIMARY_OUTLET) {
child.url.subscribe(params => {
service.setParam(params[parameter]);
});
}
}
return service;
}
return new XService(http, httpService, configuration, datePipe);
};