依賴注入 要結局的問題就是 我需要的類 全部通過注入的方式傳入進來 我們本身不需要創建出來。
image.png
如下圖 進行松耦合 productComponent有兩個相關的服務一個是 productService另一個是 AnotherproductService 我們消除了 productComponent和 productService的耦合 提高了productComponent的可重用性。
image.png
image.png
接下來 我們看一下 注入器和提供器
image.png
image.png
提供器不僅僅可以聲明在 AppComponent 中 同時可以聲明在 相應的 組件中
提供器的命名規則
1.當提供器聲明在模塊中時 ,所有的組件都可以注入它
- 當提供器聲明在組件中時 只對聲明它的組件和他的子組件可見 其他的組件是不可見狀態
也就是其他的組件是不能使用的。
3.聲明在組件和聲明在模塊中的服務有相同的tooken時,聲明在組件中的提供器會覆蓋聲明在模塊中的提供器。
4.我們優先將提供器聲明在組件中。
服務的編寫 如下圖
image.png
@injectable的作用是 別的服務可以注入到此服務中
自動生成服務的命令行如下圖
image.png
我們使用服務工廠類給我們提供器
工廠方法創建的是單例對象
image.png
下面的圖片是將loggerService和 productService 結合起來了 效果和上面的一致
image.png
于此同時 ,我們可以在提供器中提供一個boolean類型的數據 此數據關聯到相應的productService上面。
image.png
此外 不僅僅可以提供一個值,同時可以提供一個對象等等的數據類型
image.png
對于我的productComponent組件 并不知道其他提供器的依賴關系 便可以使用一系列的服務了
image.png
將組件與服務的依賴關系 更加清晰 沒有多余的耦合。
二 . 注入器
注入器的層級關系
注入器主要就是通過構造方法注入的
或者是通過下方的注入方法注入
image.png