Angular 2必须使用@Inject(forwardRef(...))来注入Service

时间:2017-04-08 12:36:21

标签: angular angular2-services angular2-injection

我的应用程序中存在一个服务问题。问题是,无论在何处注入此服务,我都会收到以下错误:

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提供的。这些组件位于我拥有的SharedModuleFeatureModule中。

不确定是否有人可以了解为什么此特定服务需要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 { }

ConfigServiceCoreModule提供,而其他地方则没有。此外,CoreModule仅在AppModule中导入。我们的想法是从单个模块提供服务。该服务正在其他模块(SharedModuleFeatureModule)中声明的组件中使用。

0 个答案:

没有答案