Angular 依赖注入机制根据providers定义生成注入实例的框架代码

简介: Angular 依赖注入机制根据providers定义生成注入实例的框架代码

image.png/**

* 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可以在此处打断点调试:image.pngimage.pngimage.png

相关文章
|
3天前
|
存储 前端开发 API
浅谈 Angular 应用前端消息显示机制的一个实际需求
浅谈 Angular 应用前端消息显示机制的一个实际需求
13 0
|
3天前
|
前端开发 JavaScript 开发者
什么是 Angular 框架中的 Zone.js
什么是 Angular 框架中的 Zone.js
31 0
|
3天前
|
开发框架 移动开发 JavaScript
探索前端开发框架:React、Angular 和 Vue 的对决(四)
探索前端开发框架:React、Angular 和 Vue 的对决(四)
|
3天前
|
开发框架 JavaScript 前端开发
探索前端开发框架:React、Angular 和 Vue 的对决(三)
探索前端开发框架:React、Angular 和 Vue 的对决(三)
|
3天前
|
开发框架 前端开发 JavaScript
探索前端开发框架:React、Angular 和 Vue 的对决(二)
探索前端开发框架:React、Angular 和 Vue 的对决(二)
|
3天前
|
开发框架 前端开发 JavaScript
探索前端开发框架:React、Angular 和 Vue 的对决(一)
探索前端开发框架:React、Angular 和 Vue 的对决(一)
|
3天前
|
测试技术 开发者
Angular Custom Providers 的一个具体例子讲解
Angular Custom Providers 的一个具体例子讲解
19 2
|
3天前
快速创建Angular组件并定义传参、绑定自定义事件的方法
快速创建Angular组件并定义传参、绑定自定义事件的方法
|
3天前
|
JavaScript 前端开发 开发工具
Angular框架
Angular框架
39 0
|
6月前
|
设计模式 监控 测试技术
Angular 使用 Constructor Parameters 进行依赖注入的优缺点
Angular 使用 Constructor Parameters 进行依赖注入的优缺点
26 0