参考代码:
https://plnkr.co/edit/j5qPROsWX2mGCQMIigee?p=info
它类似于:
import {Component, Inject, provide} from 'angular2/core';
import {Hamburger} from '../services/hamburger';
@Component({
selector: 'app',
template: `Bun Type1: {{ bunType1 }}
<br/>
Are these same instances : {{equality}}
`
})
export class App {
bunType: string;
constructor(@Inject(Hamburger) h1, @Inject(Hamburger) h2) {
this.bunType1 = h1.bun.type;
if (h1 === h2) {
this.equality = 'true'; //this is the outcome
} else {
this.equality = 'false';
}
}
}
在app类中,我们注入了两个不同的变量h1和h2。 我称它们不同,因为我相信angular2框架就像
h1 = new Hamburger()
h2 = new Hamburger()
现在将两个不同的对象注入到App构造函数中。如果是这种情况,那么我们得到结果(h1 === h2)= true?
答案 0 :(得分:-1)
因为您在引导应用程序时指定了Hamburger
类的提供程序,所以对应的实例是整个应用程序的单例(实例化一次,然后始终使用此实例)。
bootstrap(AppComponent, [ Hamburger, (...) ]);
因此,在使用此提供程序(Hamburger
类)注入参数时,您将始终拥有相同的实例(即使您注入了两次)。
它不依赖于参数(h1和h2)的名称,而是依赖于您使用的标记(在@Inject或类名称中)。
依赖注入(和分层注入器)在Angular2中的工作方式。有关详细信息,您可以查看以下问题:
此行为允许例如实现共享服务,即通过依赖注入在多个组件之间共享相同的服务实例。