/*** 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定义生成注入实例的框架代码相关推荐

  1. Angular 依赖注入

    问题描述 初学Angular,可能对一堆注解有些懵. 我们一起通过实例来探讨Angular的依赖注入. 一路尝试 @Injectable 一个命令建的StockService,一个手动建的TestSe ...

  2. Angular 依赖注入学习笔记之工厂函数的用法

    网址:https://angular.institute/di We can transfer any data through our apps, transform it and replace ...

  3. Angular 依赖注入的学习笔记

    Angular官方文档 Specifying a provider token If you specify the service class as the provider token, the ...

  4. angular依赖注入_Angular依赖注入简介

    angular依赖注入 by Neeraj Dana 由Neeraj Dana In this article, we will see how the dependency injection of ...

  5. .NET平台依赖注入机制及IoC的设计与实现

    我们设计的分层架构,层与层之间应该是松散耦合的.因为是单向单一调用,所以,这里的"松散耦合"实际是指上层类不能具体依赖于下层类,而应该依赖于下层提供的一个接口.这样,上层类不能直接 ...

  6. Angular 依赖注入 useClass 的实例创建位置

    用@NgModule在providers定义了MyService token用useClass来提供: MyNewService的初始化过程: InjectionToken: this.records ...

  7. 如何在 Web Forms 中引入依赖注入机制

    依赖注入技术就是将一个对象注入到一个需要它的对象中,同时它也是控制反转的一种实现,显而易见,这样可以实现对象之间的解耦并且更方便测试和维护,依赖注入的原则早已经指出了,应用程序的高层模块不依赖于低层模 ...

  8. angular的运行机制_Angular 2 架构

    Angular 2 架构 Angular 2 应用程序应用主要由以下 8 个部分组成: 1.模块 (Modules) 2.组件 (Components) 3.模板 (Templates) 4.元数据 ...

  9. Angular 依赖的测试和 Fake

    原文:Testing and faking Angular dependencies 依赖注入是 Angular 的一个关键特性.这种灵活的方法使我们的可声明和基于类的服务更容易隔离测试. 可摇树依赖 ...

最新文章

  1. 《professional asp.net 2.0》读书笔记--连载2
  2. 机器人第一次独立手术!最快55分钟缝合肠道,华裔教授带队研发,“结果显著优于外科医生”...
  3. ICMP Internet控制报文协议(四)
  4. 动态规划法(九)想要更多例子?
  5. SDUT-SQL题解
  6. java mic波形识别_会议季Mic Drop:您不应该错过的13场Java演讲
  7. android touch事件坐标原点,Android onTouch事件与手势操作
  8. 蒙特卡罗方法—举例说明(C++、python)
  9. 都说开完电动汽车,就不想再开回燃油车了,是这样吗?
  10. Caffe 议事(一):从零开始搭建 ResNet 之 残差网络结构介绍和数据准备
  11. vue 类型字段除了用select框_pumelo-select
  12. Android Studio实现 历史上的今天
  13. sql server 中join 查詢中on後面 加case的用法.
  14. 190706每日一句
  15. 虚拟机win7纯净版镜像_win7中文版家vm虚拟机xp镜像庭普通版32位官方下载
  16. 杭州电子科技大学计算机技术考研总结
  17. 推荐windows下 DNS本地化工具 TreeWalk DNS 8.21
  18. Ubuntu问题:E45: ‘readonly‘ option is set (add ! to override)错误解决
  19. Tensorflow 版本切换与 slim 问题
  20. 百度地图API 浏览器端调用 傻瓜教程

热门文章

  1. 9.使用原生js实现类似于jquery的动画
  2. BZOJ2459 : [BeiJing2011]神秘好人
  3. string replace
  4. 用js控制video的src_百度知道
  5. C#中的Using的用法
  6. 什么是Handler(二)
  7. [转]Qtopia2.2.0移植
  8. 通过改善架构来提高 ASP.Net 应用程序的性能
  9. spring bean依赖与配置
  10. JavaWeb(part1)--servlet