为什么 Angular2 不自动检测组件定义中使用的指令和提供程序?

Why doesn't Angular2 auto detect directives and providers used in a component definition?

对于在模板中使用的自定义指令,我想 Angular 不知道新的 html elements/attributes 直到我们在 [=20= 中告诉它可能是有意义的] 属性的Component函数。

然而,我不明白为什么 Angular 没有弄清楚我们想要依赖注入的提供者 即使我们通过参数传递这些服务名称在组件构造函数中。这是设计决定,还是 Angular 无法仅从构造函数参数中找出所需的提供程序?

本质上,我们已经有了constructor(heroService: HeroService) {...},为什么还需要providers: [HeroService],

其实已经处理好了。 RC5 删除了很多样板代码。

因此您不再需要在@Component 或@Directive 声明中使用'directives' 或'providers' 语法。

Link: http://angularjs.blogspot.com/2016/08/angular-2-rc5-ngmodules-lazy-loading.html

提供商定义了两件事

  1. 范围
    您定义提供者的位置定义了将注入的实例。 添加到根的提供程序与整个应用程序共享一个实例。
    组件上的提供者会为自己及其子树覆盖根提供者。

  2. 具体值
    您可以拥有像

  3. 这样的提供商
{ provide: HeroService, useClass: SuperHeroService }
{ provide: 'SomeConfig', useValue: 'someValue' }
{ provide: Foo, useFactory: () => new Bar() }

这绝对是一个设计决定,因为在某些情况下,您可能希望在整个应用程序中使用单一服务,而在另一种情况下,您可能需要相同服务的更多实例。

关于@cDecker32 的回答,您仍然需要注册提供者,只是现在您在 @NgModules 中注册,请查看此文档:

https://angular.io/docs/ts/latest/guide/ngmodule.html