依赖注入 要结局的问题就是 我需要的类 全部通过注入的方式传入进来 我们本身不需要创建出来。
如下图 进行松耦合 productComponent有两个相关的服务一个是 productService另一个是 AnotherproductService 我们消除了 productComponent和 productService的耦合 提高了productComponent的可重用性。
接下来 我们看一下 注入器和提供器
提供器不仅仅可以声明在 AppComponent 中 同时可以声明在 相应的 组件中
提供器的命名规则
1.当提供器声明在模块中时 ,所有的组件都可以注入它
- 当提供器声明在组件中时 只对声明它的组件和他的子组件可见 其他的组件是不可见状态
也就是其他的组件是不能使用的。
3.声明在组件和声明在模块中的服务有相同的tooken时,声明在组件中的提供器会覆盖声明在模块中的提供器。
4.我们优先将提供器声明在组件中。
服务的编写 如下图
@injectable的作用是 别的服务可以注入到此服务中
自动生成服务的命令行如下图
我们使用服务工厂类给我们提供器
工厂方法创建的是单例对象
下面的图片是将loggerService和 productService 结合起来了 效果和上面的一致
于此同时 ,我们可以在提供器中提供一个boolean类型的数据 此数据关联到相应的productService上面。
此外 不仅仅可以提供一个值,同时可以提供一个对象等等的数据类型
对于我的productComponent组件 并不知道其他提供器的依赖关系 便可以使用一系列的服务了
将组件与服务的依赖关系 更加清晰 没有多余的耦合。
二 . 注入器
注入器的层级关系
注入器主要就是通过构造方法注入的
或者是通过下方的注入方法注入