アプリケーション内の 1 つのサービスに問題があります。問題は、このサービスが挿入されている場所で次のエラーが発生することです。
Uncaught (in promise): Error: Can't resolve all parameters for TestComponent: ([object Object], ?, [object Object])
バレルの使用が原因でこの問題が発生する可能性があることはわかっていますが、サービスにバレルを使用していませんが、ファイルを「直接」参照しています../../core/services/config.service
。
この回答@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
アップデート
サービスの提供方法は次のとおりです。
コアモジュール
@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
) で宣言されているコンポーネントで使用されています。