8.7 Injector Tree 注入器树 - RLwu/angular-start GitHub Wiki
Injector Tree - 注入器树
Angular2框架并不仅仅构造单一的注入器实例。事实上,当Angular2框架启动时, 将构造一个层级分别的注入器树:
bootstap(EzApp)的执行逻辑是这样的:
//创建PlatformRef对象
var pf = platform(BROWSER_PROVIDERS);
//创建ApplicationRef对象
var app = pf.application([BROWSER_APP_PROVIDERS]);
//启动根组件
app.bootstrap(EzApp);
PlatformRef实例化根注入器,ApplicationRef对象的注入器原型指向它,而EzApp组件 的注入器原型则指向ApplicationRef对象的注入器...
因此,当在EzB的构造函数中试图注入某个TOKEN时,Angular2会首先在当前的注入器中查 找,如果找不到,则向上继续查找,直到根注入器。
考虑到依赖注入总是维护单例,因此如果需要在不同的组件中注入不同的实例,就应当在 不同的组件中分别使用Component注解的providers属性声明依赖项,而不是在父级声明 依赖项。