@Injectable({
providedIn: 'root',
})
providedIn: 'root', 表示在这个application中的任何地方都可以看到,如果不使用这个,就需要在app.module.ts中进行providers
使用这个装饰器,表示这个service可以注入,并且在每一个地方都是相同的instance(单例),这个和DI Token有关系,DI Token实际上是一个service instance map, 比如providers:[SomeService], DI Token中会有这个SomeService对应的一个instance,
这样在使用的时候,引用申明了类型,DI Token就会根据类型找这个对应的instance,实现单例。
heroService: HeroService;
constructor(heroService: HeroService)
如果要各个component使用不同的service instance需要在compoent的providers:[SomeService],进行申明
DI framework会依次向上查找providers树,如果没有找到,就抛出异常,可以通过以下方式更改DI framework的查找方式
@Optional 当没找到依赖的时候返回null
@Host() 只在本component查找,如果component被嵌入到其他component,Host编程parent component那一级
@Self()只在自己这里找, @SkipSelf()跳过自己向上找