当Angular建立组件类的新实例时,它会经过查看该组件类的构造函数,来决定该组件依赖哪些服务或者其余依赖项 ,好比上面的heroService函数
当Angular发现某个组件依赖某个服务时,它会首先坚持是否该注入器中已经有了那个服务的任何现有实例。若是所请求的服务尚不存在,注入器会使用之前注册的服务提供商制做一个,并把它加入注入器中,而后把该服务返回给Angular优化
当全部请求的服务已解析并返回时,Angular能够用这些服务实例为参数,调用该组件的构造函数spa
对于要用到的任何服务,你必须至少注册一个提供商。blog
①服务能够在自已的元数据中把自已注册为提供商,这样能够让自已随处可用io
在根一级提供服务时,Angular会建立一个单一的共享实例,而且把它注入到任何想要它的类中。这种在@Injectable元数据注册提供商的方式还能够让angular可以经过移除那些从未被用过的服务来优化大小table
②能够在特定的模块注册提供商,该服务的同一个实例将会对该NgModule中的全部组件可用angular
③也能够在组件级注册提供商,你会为该组件的每个新实例提供该服务的一个新实例构造函数