我的应用程序中的一项服务存在问题。问题是,无论在何处注入此服务,我都会收到以下错误:
Uncaught (in promise): Error: Can't resolve all parameters for TestComponent: ([object Object], ?, [object Object])
我知道这个问题可能是由于使用了桶而引起的,但是我没有将桶用于服务,而是“直接”引用文件,例如:../../core/services/config.service
.
正如this 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
中导入的a提供的AppModule
。组件在我拥有的 aSharedModule
或 aFeatureModule
中。
不确定是否有人可以阐明为什么此特定服务需要forwardRef
在任何组件中(除AppComponent
),而以相同方式导入和提供的所有其他服务都以“正常方式”注入。
更新
以下是提供服务的方式:
核心模块
@NgModule({
providers: [
// Other Services...
ConfigService
]
})
export class CoreModule { }
应用模块
@NgModule({
bootstrap: [AppComponent],
imports: [
BrowserModule,
FormsModule,
HttpModule,
BrowserAnimationsModule,
CoreModule,
AppRoutingModule
]
})
export class AppModule { }
ConfigService
是从那里提供的,CoreModule
没有其他地方提供。也CoreModule
仅在AppModule
. 这个想法是从单个模块提供服务。该服务用于在其他模块(SharedModule
和 a FeatureModule
)中声明的组件中。