依赖注入其实就是angular帮助我们实例化一个服务实例,不用显式实例化。
@Component 装饰器中的 providers 属性是依赖注入操作的关键,它会为该组件创建一 个注入器对象,并新建对应实例(LoggerService)存储到这个注入器里。组件在需要引入LoggerService实例时,通过ts的类型匹配即可从注入器中取出相应的实例对象,无须再重复显式实例化。
注意:服务的每一次注入(也就是使用providers声明),该服务都会被创建出新的实例,存在该组件对应的注入器对象中。组件的所有子组件均默认继承父组件的注入器对象,复用该注入器里存储的服务实例。这种机制可保证服务以单例模式运行,除非某个子组件再次注入(即通过providers声明)。
@Component({
selector: 'test',
providers: [LoggerService]
})
export class TestComponent{
constructor(private logger: LoggerService){ // 在构造函数中声明要注入的类型以及变量名
}
}
服务也可以注入到模块里,注入到模块里的服务在整个应用程序中均能使用,因为所有模块都共享着同一个应用级别的根注入器对象。