我理解为了向Angular2组件注入一个依赖项,我只是在它的构造函数中注释一个参数,就像这里的ThingService一样.我想了解的是Angular如何知道在运行时注入什么,据我所知,这只是TypeScript注释,在运行时没有任何意义.什么是低级别的内部机制来管理哪些提供程序放置在组件的构造函数中.如果你自己推出这个系统,它将如何工作.这是一种我不理解的打字机制吗?
@Component({
selector: 'app-thing',
templateUrl: './thing.component.html',
styleUrls: ['./thing.component.scss']
})
export class ThingComponent {
constructor(
private thingService: ThingService) {
}
}
解决方法:
引擎盖下发生的事情是TypeScript在生成的ES5代码中保留元数据.因此,构造函数中的注释实际上并没有消失,它在运行时可用,然后Angular的DI可以从那里获取它.
如果满足以下要求,TypeScript始终会保留该元数据:
>两个编译器选项属性 – emitDecoratorMetadata和experimentalDecorators – 都需要设置为true
>类上必须至少有一个装饰器(这就是为什么有些服务类使用@Injectable()装饰器,否则将不会发出其依赖关系的元数据)
我写了一篇关于该主题here的深入文章