如何将共享模块中的服务注入我的核心模块?
我无法将PersistSettingsService注入LocalisationProvider本地化位于核心模块中,而Persist位于共享模块中,这些都是这样设置的。
const Core =
angular
.module('core', [Auth, Shared])
.constant('moment', moment)
.service('ModuleLazyLoaderService', ModuleLazyLoaderService)
.service('PermissionsService', PermissionsService)
.service('PersistSettingsService', PersistSettingsService)
.provider('ModuleLazyLoaderState', ModuleLazyLoaderStateProvider)
.provider('Localisation', LocalisationProvider)
.config(config)
.run(run);
我从共享中删除了很多,因为有很多项目添加到共享
const Shared = angular
.module('shared', [])
.service('PersistSettingsService', PersistSettingsService)
这导致
[$injector:modulerr] Failed to instantiate module app due to: Error: $injector:modulerr] Failed to instantiate module core due to: Error: [$injector:unpr] Unknown provider: PersistSettingsService
根据我的理解,共享应该包含在核心中,所以我应该能够将其注入。我已经尝试将其设置为提供者,但这并没有解决问题。
我有我的Provider类。
export default class LocalisationProvider {
$get() {
return {
getDateFormat: () => this.getDateFormat(),
getSetFormat: () => this.getSetFormat(),
getTimeFormat: () => this.getTimeFormat(),
setDateFormat: value => this.setDateFormat(value),
setTimeFormat: value => this.setTimeFormat(value)
};
}
constructor(PersistSettingsService) {
'ngInject';
this.persistSettingsService = PersistSettingsService;
}
}
我确保所有'ngInject'都在场,任何帮助都会受到赞赏。
我创建了一个可复制的版本,但说实话,我不确定它们是否因为同样的原因而失败。
答案 0 :(得分:0)
您无法将服务注入提供程序本身。将服务注入提供者的$ get方法与将服务注入工厂相同,但不能直接将其注入提供者函数。
但是我通过将提供程序逻辑重构为服务然后将其注入我的提供者$ get方法来解决这个问题:
export default class LocalisationProvider {
$get(LocalisationController) {
'ngInject';
this.localisationController = LocalisationController;
this.getDateFormat = () => this.localisationController.getDateFormat();
return {
getDateFormat: () => this.getDateFormat(),
getSetFormat: () => this.localisationController.getSetFormat(),
getTimeFormat: () => this.localisationController.getSetFormat(),
setDateFormat: value => this.localisationController.setDateFormat(value),
setTimeFormat: value => this.localisationController.setTimeFormat(value)
};
}
}
getDateFormat在get和inside之外的原因是因为提供程序在模块加载阶段运行,而$ get在实例化你提供的服务时运行。