(注意我使用的是 Angular 2 RC5)
为简单起见,我有一个这样的应用程序:
app.module.ts
@NgModule({
providers: [
RootService
],
entryComponents: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {}
根服务.ts
import Dependency1 from './somewhere'
import Dependency2 from './somewhere-else'
@Component({
providers: [Dependency1, Dependency2]
})
@Injectable()
export class RootService {
constructor(
private dep1: Dependency1,
private dep2: Dependency2
) {...}
}
一个依赖的例子是:
依赖1.ts
@Injectable()
export class Dependency1{
public doGroundbreakingSciencyStuff() {...}
}
我的问题是:为什么,在上述情况下,我会收到一个错误消息:
No provider for PouchSync!
.
我可以通过将 Dependency1 和 Dependency2 添加到app.module.tsproviders
中的数组来解决问题,如下所示:
app.module.ts(固定)
@NgModule({
providers: [
RootService,
Dependency1,
Dependency2
],
entryComponents: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {}
这看起来很丑陋。只RootService
需要了解这些依赖关系。我在这里做错了吗?或者有人可以解释为什么必须这样吗?当然,在注入时RootService
,注入器可以看到它依赖于它Dependency1
,Dependency2
因此也必须注入它们,因此它们也将是应用程序范围的单例。