先从创建依赖实例的方法开始
// core/injector/instance-loader.ts
public async createInstancesOfDependencies(
modules: Map<string, Module> = this.container.getModules(),
) {
this.createPrototypes(modules);
await this.createInstances(modules);
}
可以清晰的看出创建的过程分两步:
- createPrototypes: 通过
Object.create()
创建一个对象 - createInstances: 寻找依赖并创建实例
因为 provider, injectable, controller
的依赖注入实例化过程都大同小异,为方便解释,下面以 provider
为例子来说明依赖注入和实例化的过程
第一步
遍历所有模块的 provider
,并使用 Object.create()
进行创建。不会进行依赖注入,创建出来的对象也没有调用构造函数,是不完整的,一些属性也是 undefined
,这一步是为解决循环依赖作准备<