angular 依赖注入是angular的核心思想
StaticProvider 和 Injector 通过Injector.create将StaticProvider转化为Injector
create(options: {providers: StaticProvider[], parent?: Injector, name?: string}): Injector
PlatformRef是什么?
平台实例描述,createPlatform和createPlatformFactory工厂创建生成,也可以理解成提供特定依赖注入项目的集合
- createPlatform
通过传入Injector创建PlatformRef
createPlatform(injector: Injector): PlatformRef
- createPlatformFactory
通过StaticProvider创建PlatformRef,内部调用createPlatform创建PlatformRef
createPlatformFactory(
parentPlatformFactory: ((extraProviders?: StaticProvider[]) => PlatformRef) | null,
name: string,
providers: StaticProvider[] = []
): (extraProviders?: StaticProvider[]) => PlatformRef
PlatformRef启动后生成NgModuleRef
export class PlatformRef {
// 通过NgModuleFactory启动,aot
bootstrapModuleFactory<M>(
moduleFactory: NgModuleFactory<M>,
options?: BootstrapOptions
): Promise<NgModuleRef<M>>;
// 通过NgModule启动,jit
bootstrapModule<M>(
moduleType: Type<M>,
compilerOptions: (CompilerOptions & BootstrapOptions) |
Array<CompilerOptions & BootstrapOptions> = []
): Promise<NgModuleRef<M>>
}
NgModuleRef
ngModule实例,可以由NgModuleFactory.create生成,可以理解为局部/模块内依赖注入项目集合,NgModule的存在一定程度上解决Injector的配置使用问题。直接引用其他NgModule就能拿到此NgModule所注册的Injector。
ComponentFactoryResolver
组件工厂提供者,由NgModuleRef注入,ComponentFactoryResolver.resolveComponentFactory生成ComponentFactory
ComponentFactory
组件工厂,ComponentFactory.create创建ComponentRef
create(
injector: Injector,
projectableNodes?: any[][],
rootSelectorOrNode?: string|any,
ngModule?: NgModuleRef<any>
): ComponentRef<C>;
- ComponentFactory_:ComponentFactory的实现
ComponentRef
组件实例描述,ComponentRef.hostView获取ViewRef,ComponentRef.changeDetectorRef获取ChangeDetectorRef
- ComponentRef_: ComponentRef的实现
ViewRef 和 ChangeDetectorRef
ViewRef:视图实例描述, ChangeDetectorRef:变化检测实例描述,用于控制变化检测