关于Angular @Injectable的几种测试情况

我有一个服务类:

export class MyNewService {
  seed: number;
  text: 'NewService';
  constructor(){
    this.seed = Number((Math.random() * 100).toFixed(0));
    console.log('diablo constructor called: ' + this.seed);
  }
}

在app.module.ts里providers区域的定义:

测试场景1

MyNewService前面未加任何@Injectable的注解。

测试结果:

NullInjectorError: No provider for MyNewService!

测试场景2

MyNewService前面加上@Injectable的注解。

仍然一样的错误:

测试场景3

@Injectable({ providedIn: 'root' })

这次没有报错了:


测试场景4

把useExisting改成useClass:

对应的MyNewService实例化的代码则在这里调用:

测试场景5

对于同一个injection token,使用useExisting提供两个provider:

测试发现,后出现在providers数组里的provider定义生效:

而且只有后出现的provider的构造函数会被调用。

测试场景6 加上useExisting

很有意思,这一次,MyNewService和MyNewerService的构造函数都触发了:


这次parameter1变成一个数组了:

更多Jerry的原创文章,尽在:“汪子熙”:

汪子熙 CSDN认证博客专家 前端框架 Node.js SAP
JerryWang,2007年从电子科技大学计算机专业硕士毕业后加入SAP成都研究院工作至今。Jerry是SAP社区导师,SAP中国技术大使。2020年5月下旬,Jerry做了脑部肿瘤的开颅切除手术,对编程和人生又有了新的感悟。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__0809 返回首页