Angular 依赖注入机制根据providers定义生成注入实例的框架代码
生活随笔
收集整理的這篇文章主要介紹了
Angular 依赖注入机制根据providers定义生成注入实例的框架代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*** Converts a `SingleProvider` into a factory function.** @param {?} provider provider to convert to factory* @param {?=} ngModuleType* @param {?=} providers* @return {?}*/
function providerToFactory(provider, ngModuleType, providers) {/** @type {?} */let factory = undefined;if (isTypeProvider(provider)) {/** @type {?} */const unwrappedProvider = resolveForwardRef(provider);return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider);}else {if (isValueProvider(provider)) {factory = (/*** @return {?}*/() => resolveForwardRef(provider.useValue));}else if (isFactoryProvider(provider)) {factory = (/*** @return {?}*/() => provider.useFactory(...injectArgs(provider.deps || [])));}else if (isExistingProvider(provider)) {factory = (/*** @return {?}*/() => ??inject(resolveForwardRef(provider.useExisting)));}else {/** @type {?} */const classRef = resolveForwardRef(provider &&(((/** @type {?} */ (provider))).useClass || provider.provide));if (!classRef) {throwInvalidProviderError(ngModuleType, providers, provider);}if (hasDeps(provider)) {factory = (/*** @return {?}*/() => new (classRef)(...injectArgs(provider.deps)));}else {return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef);}}}return factory;
}
UseValue和UseExisting可以在此處打斷點調試:
而useClass的分支在下圖,由此可見,useClass就是簡單的new操作:
factory其實就是構造函數,只是由于Chrome開發者工具的限制,無法正確顯示出來:
這里可見,useExisting如果沒有實例,還是會調用構造函數new一個新的出來。
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的Angular 依赖注入机制根据providers定义生成注入实例的框架代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抖音火山版推荐视频怎么设置
- 下一篇: Angular依赖注入机制的一个错误消息