我有一个服务类:
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的原创文章,尽在:“汪子熙”:
JerryWang,2007年从电子科技大学计算机专业硕士毕业后加入SAP成都研究院工作至今。Jerry是SAP社区导师,SAP中国技术大使。2020年5月下旬,Jerry做了脑部肿瘤的开颅切除手术,对编程和人生又有了新的感悟。