4

アプリケーション内の 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から提供されます。コンポーネントは、または私が持っているのいずれかにあります。CoreModuleAppModuleSharedModuleFeatureModule

同じ方法でインポートおよび提供される他のすべてのサービスが「通常の方法」で注入されるのに対し、この特定のサービスが任意のコンポーネントで を必要とする理由について誰かが光を当てることができるかどうかはわかりません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) で宣言されているコンポーネントで使用されています。

4

0 に答える 0