Angular 角度2:没有(注入)服务的提供者
我的应用程序中有两项服务-Main服务和RightClickService。只有MainService在应用程序中全局可访问,并且RightClickService被注入MainService。因此,我将以下文件定义为: 应用程序模块.tsAngular 角度2:没有(注入)服务的提供者,angular,dependency-injection,Angular,Dependency Injection,我的应用程序中有两项服务-Main服务和RightClickService。只有MainService在应用程序中全局可访问,并且RightClickService被注入MainService。因此,我将以下文件定义为: 应用程序模块.ts @NgModule({ declarations: [ AppComponent, ... ], imports: [ BrowserModule, FormsModule, HttpModule ],
@NgModule({
declarations: [
AppComponent,
...
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [MainService],
bootstrap: [AppComponent]
})
export class AppModule { }
@Injectable()
export class MainService {
constructor(private rightClickService: RightClickService) {
console.log("Constructor is init");
}
}
app.module.ts中未提及RightClickService
服务.ts
@NgModule({
declarations: [
AppComponent,
...
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [MainService],
bootstrap: [AppComponent]
})
export class AppModule { }
@Injectable()
export class MainService {
constructor(private rightClickService: RightClickService) {
console.log("Constructor is init");
}
}
RightClickService仅存在于大型应用程序RightClickComponent中名为的一个组件中
右键单击.component.ts:
@Component({
selector: 'right-click',
template: `
...
`,
styleUrls: ['...'],
providers: [RightClickService]
})
export class RightClickComponent implements OnInit {
constructor(private rightClickService: RightClickService) {}
}
尽管如此,我还是得到了一个错误:
EXCEPTION: No provider for RightClickService!
你知道我做错了什么吗 除了已经说过的,你还必须知道两件事:
@NgModule中的所有提供程序。提供程序
应用程序中任何模块的数组,包括AppModule
@Component.providers
数组中声明的提供程序function MainServiceFactory(RightClickService) {
return new MainService(new RightClickService());
}
@NgModule({
declarations: [
AppComponent,
...
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [
{
provide: MainService,
useFactory: MainServiceFactory,
deps: [RightClickService]
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
我只是把它放进了一个小盒子,除非我打错了什么。。。你所拥有的似乎很有用。那么,也许还有别的问题 你可以在这里查看plunker吗: (这个工具不允许我在没有代码的情况下发布……但是你已经有了上面的代码……所以我只是粘贴了一部分。)
更改为
(private rightClickService:MainService)
什么?为什么?在何处更改它?MainService
找不到RightClickService
的提供程序,因为您没有在ngmoduley中提供它服务的导出类是nameMainService@CrazySynthax,您的MainService
将在之前创建,您在此处有比赛条件,您不能使用main服务
,因为它取决于您的右键单击服务
。感谢您对这一点的详细解释;我在尝试将一个服务注入另一个服务时遇到了类似的问题(这两个服务都需要考虑ModuleWithProviders配置),这确实澄清了DI级别发生了什么,以及为什么没有正确找到和解决提供程序。