Angular 2:向另一个服务注入服务.(没有提供商错误)

Ian*_*ang 28 angular

我想将服务注入另一个服务:

@Injectable()

export class Dispatcher {
}


@Injectable()

export class TodoStore {

    constructor(@Inject(Dispatcher) dispatcher:Dispatcher){ 

    }
}
Run Code Online (Sandbox Code Playgroud)

但我总是得到错误:Dispatcher没有提供者!

谢谢.

Abd*_*yer 33

你需要在provide某个地方提供服务.请参阅angular2 docs

您可以在bootstrap方法中提供它:

bootstrap(AppComponent,[TodoStore,Dispatcher]);
Run Code Online (Sandbox Code Playgroud)

或应用程序组件:

@Component({
    ...
      providers:[TodoStore,Dispatcher]
}
...
Run Code Online (Sandbox Code Playgroud)

或者在任何其他组件中,根据您的需要.

此外,您不需要@Inject(Dispatcher)在构造函数中.它与...基本相同

constructor(dispacher:Dispatcher){
}
Run Code Online (Sandbox Code Playgroud)

哦是的,欢迎来到SO :)


Ian*_*ang 6

谢谢你的回复.

由于它不是Component,因此@Component(...)解决方案不适用.

bootstrap(AppComponent,[TodoStore,Dispatcher]); 
Run Code Online (Sandbox Code Playgroud)

解决方案有效 但这使它成为main.ts一个中心位置.

  • 为什么你认为`@Component()`不起作用?`@Component()`是注册提供者的地方,它仍然可以是服务的injectec. (2认同)
  • @GünterZöchbauer但一个服务没有@组件装饰器,因此,如果您想在另一个服务中合并一个服务,则必须将其包含在bootstrap()中,为什么可以在@组件及其所有子级中指定提供程序;但不是在简单的服务父级中..没有@ Component装饰器,只是一个简单的类。例如:mock.service.ts:从“ @ angular / core”导入{可注入};从“ ./mock-heroes”导入{HEROES};@Injectable()导出类MockService {getHeroes(){return HEROES; }} (2认同)