Angular依赖注入笔记

@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()跳过自己向上找


上一篇:IOC 控制反转与 DI 依赖注入


下一篇:DI注入