當Angular建立組件類的新實例時,它會經過查看該組件類的構造函數,來決定該組件依賴哪些服務或者其餘依賴項 ,好比上面的heroService函數
當Angular發現某個組件依賴某個服務時,它會首先堅持是否該注入器中已經有了那個服務的任何現有實例。若是所請求的服務尚不存在,注入器會使用之前註冊的服務提供商製做一個,並把它加入注入器中,而後把該服務返回給Angular優化
當全部請求的服務已解析並返回時,Angular能夠用這些服務實例爲參數,調用該組件的構造函數spa
對於要用到的任何服務,你必須至少註冊一個提供商。blog
①服務能夠在自已的元數據中把自已註冊爲提供商,這樣能夠讓自已隨處可用io
在根一級提供服務時,Angular會建立一個單一的共享實例,而且把它注入到任何想要它的類中。這種在@Injectable元數據註冊提供商的方式還能夠讓angular可以經過移除那些從未被用過的服務來優化大小table
②能夠在特定的模塊註冊提供商,該服務的同一個實例將會對該NgModule中的全部組件可用angular
③也能夠在組件級註冊提供商,你會爲該組件的每個新實例提供該服務的一個新實例構造函數