我无法想象我需要使用工厂提供商的情况.
根据官方文档https://angular.io/docs/ts/latest/guide/dependency-injection.html,情况是一个人可能无法从另一个服务(service-a)中访问服务(service-b),但工厂函数确实(可以访问service-b).那么,什么时候真的会发生这样的事情呢?
解决方法
您只需传递课程即可注册提供者
providers: [MyService]
这只适用于Angulars DI可以实例化MyService的情况.
如果你有例如
@Injectable() class MyService { constructor(private http: Http,private String configVal) {} }
然后DI无法创建实例,因为String不是提供者的有效密钥(原始类型不能作为提供者密钥.
如果您需要,可以使用像
providers: [ { provide: MyService,useFactory: (http) => { return new MyService(http,'http://mydbserver.com:12345'); },deps: [Http] } ]