angular2 的依賴注入包含了太多的內(nèi)容,其中的一個(gè)重點(diǎn)就是注入器,而注入器又非常難理解,今天我們不深入介紹注入器的內(nèi)容,可以參考官方文檔,我們今天來(lái)說(shuō)注入器的層級(jí)。

也就是組件獲取服務(wù)的容器會(huì)選擇具體哪一個(gè)。

先簡(jiǎn)單介紹一個(gè)背景:有3個(gè)組件AppComponent 根組件、DetailList組件 ( 日志列表組件)、Detail組件( 日志組件)。

這三個(gè)組件會(huì)形成一個(gè)組件樹(shù),對(duì)應(yīng)的我們也可以認(rèn)為每個(gè)組件都會(huì)有一個(gè)獨(dú)立的注入器(有時(shí)候不會(huì)出現(xiàn),但是可以這么認(rèn)為)。

加入一個(gè)日志服務(wù)LoggerService,如果按照我們普通的入門(mén)方式,在根模塊providers 中提供LoggerService。那么在整個(gè)應(yīng)用程序中,LoggerService只有一個(gè)實(shí)例,什么意思呢?就是說(shuō)無(wú)論在哪個(gè)組件,獲取到的都是首次創(chuàng)建的LoggerService,所有組件共用一個(gè)服務(wù)實(shí)例,這有時(shí)候會(huì)是一個(gè)有用的特性,比如我們使用的全局配置。


全局唯一不是我們這次要驗(yàn)證的重點(diǎn),因?yàn)檫@個(gè)太普通,我們這次要說(shuō)明的是我們?nèi)绾卧诿總€(gè)組件中都獲取單獨(dú)的LoggerService實(shí)例,即每個(gè)組件的實(shí)例都不同。這個(gè)就需要對(duì)ng2的依賴注入有所了解才可以。

我們逐步來(lái)說(shuō)明如何實(shí)現(xiàn)?

為了便于看到這篇短文的同學(xué)有所了解,我加入一些基礎(chǔ)代碼。

1.app.module.ts 應(yīng)用程序根模塊。注意此處我們沒(méi)有在Providers中注冊(cè)loggerService。當(dāng)然注冊(cè)了通過(guò)后面的方法也可以達(dá)到我們的目的。