繁体   English   中英

Angular 2-在服务中包含提供者

[英]Angular 2 - Including a provider in a service

我将服务作为提供程序加载到组件中。 该服务可以使用Http返回数据,也可以不使用Http返回数据,该组件无需关心。 但是,如果加载的服务使用Http,则组件本身似乎必须包含HTTP_PROVIDERS。 这打破了关注点分离。 我有什么误会?

实际上,引导应用程序时最好指定HTTP_PROVIDERS

bootstrap(AppComponent, [ HTTP_PROVIDERS ]);

但是,我同意您的看法,即仅在组件上配置提供程序会有一些影响。

由于采用了分层注入器,因此先前的配置将起作用。

有关分层注射器的更多详细信息,请参见以下问题:

这打破了关注点分离。 我有什么误会?

为了支持实例化服务的多个实例(即,所有服务不必都是单例),Angular应用程序需要一种方法来指定多个注入器(而不仅仅是一个)。 这些注入器需要以某种层次结构进行创建和配置。 组件/指令树由于是树,因此已经具有层次结构。 因此,Angular使用(现有)组件树来配置依赖项注入。 我喜欢将其视为覆盖组件树的稀疏“注入器树”。

我认为为服务定义一个单独的层次结构将需要做更多的工作-作为开发人员,我们可能必须定义和配置另一种注入器树。

因此,与其说它是“组件需要了解服务的依赖关系”,不如说是,它听起来确实像我们正在打破关注点的分离一样,而是让我更像是这样思考:当我编写Angular应用程序时,我必须在注入器树上配置我的提供程序/依赖项”。由于注入器树覆盖了组件树,因此我使用组件对其进行配置。

但这并不理想,因为如果您想在其他应用程序中重用组件,则可能需要更改providers数组(即,可能需要重新配置注入器树)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM