我的应用程序中存在一个服务问题。问题是,无论在何处注入此服务,我都会收到以下错误:
Uncaught (in promise): Error: Can't resolve all parameters for TestComponent: ([object Object], ?, [object Object])
我知道这个问题可能是由于使用了桶造成的,但是我没有使用桶作为服务,而是直接引用文件""例如:../../core/services/config.service
。
正如本answer中所建议的那样,我尝试在注入此服务的任何地方使用@Inject(forwardRef(...))
。我唯一的例外是AppComponent
,在这种情况下,我注入相同的服务"通常"我没有得到任何错误:
export class AppComponent implements OnInit {
constructor(
private configService: ConfigService, // NO ERROR
private router: Router
) { }
...
}
在所有其他地方,如果我不做以下的事情,我会收到上述错误:
export class BuyButtonComponent {
constructor(
@Inject(forwardRef(() => ConfigService)) private configService: ConfigService,
// private configService: ConfigService // DOES NOT WORK
) { }
...
}
我的理解是,在注入依赖项但尚未定义时使用forwardRef()
。 ConfigService
是从CoreModule
中导入的AppModule
提供的。这些组件位于我拥有的SharedModule
或FeatureModule
中。
不确定是否有人可以了解为什么此特定服务需要forwardRef
在任何组件中(AppComponent
),而所有其他服务都以相同方式导入和提供按照正常的方式注入"。
更新
以下是提供服务的方式:
CoreModule
@NgModule({
providers: [
// Other Services...
ConfigService
]
})
export class CoreModule { }
的AppModule
@NgModule({
bootstrap: [AppComponent],
imports: [
BrowserModule,
FormsModule,
HttpModule,
BrowserAnimationsModule,
CoreModule,
AppRoutingModule
]
})
export class AppModule { }
ConfigService
由CoreModule
提供,而其他地方则没有。此外,CoreModule
仅在AppModule
中导入。我们的想法是从单个模块提供服务。该服务正在其他模块(SharedModule
和FeatureModule
)中声明的组件中使用。