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 依赖注入
问题描述 初学Angular,可能对一堆注解有些懵. 我们一起通过实例来探讨Angular的依赖注入. 一路尝试 @Injectable 一个命令建的StockService,一个手动建的TestSe ...
- Angular 依赖注入学习笔记之工厂函数的用法
网址:https://angular.institute/di We can transfer any data through our apps, transform it and replace ...
- Angular 依赖注入的学习笔记
Angular官方文档 Specifying a provider token If you specify the service class as the provider token, the ...
- angular依赖注入_Angular依赖注入简介
angular依赖注入 by Neeraj Dana 由Neeraj Dana In this article, we will see how the dependency injection of ...
- .NET平台依赖注入机制及IoC的设计与实现
我们设计的分层架构,层与层之间应该是松散耦合的.因为是单向单一调用,所以,这里的"松散耦合"实际是指上层类不能具体依赖于下层类,而应该依赖于下层提供的一个接口.这样,上层类不能直接 ...
- Angular 依赖注入 useClass 的实例创建位置
用@NgModule在providers定义了MyService token用useClass来提供: MyNewService的初始化过程: InjectionToken: this.records ...
- 如何在 Web Forms 中引入依赖注入机制
依赖注入技术就是将一个对象注入到一个需要它的对象中,同时它也是控制反转的一种实现,显而易见,这样可以实现对象之间的解耦并且更方便测试和维护,依赖注入的原则早已经指出了,应用程序的高层模块不依赖于低层模 ...
- angular的运行机制_Angular 2 架构
Angular 2 架构 Angular 2 应用程序应用主要由以下 8 个部分组成: 1.模块 (Modules) 2.组件 (Components) 3.模板 (Templates) 4.元数据 ...
- Angular 依赖的测试和 Fake
原文:Testing and faking Angular dependencies 依赖注入是 Angular 的一个关键特性.这种灵活的方法使我们的可声明和基于类的服务更容易隔离测试. 可摇树依赖 ...
最新文章
- 《professional asp.net 2.0》读书笔记--连载2
- 机器人第一次独立手术!最快55分钟缝合肠道,华裔教授带队研发,“结果显著优于外科医生”...
- ICMP Internet控制报文协议(四)
- 动态规划法(九)想要更多例子?
- SDUT-SQL题解
- java mic波形识别_会议季Mic Drop:您不应该错过的13场Java演讲
- android touch事件坐标原点,Android onTouch事件与手势操作
- 蒙特卡罗方法—举例说明(C++、python)
- 都说开完电动汽车,就不想再开回燃油车了,是这样吗?
- Caffe 议事(一):从零开始搭建 ResNet 之 残差网络结构介绍和数据准备
- vue 类型字段除了用select框_pumelo-select
- Android Studio实现 历史上的今天
- sql server 中join 查詢中on後面 加case的用法.
- 190706每日一句
- 虚拟机win7纯净版镜像_win7中文版家vm虚拟机xp镜像庭普通版32位官方下载
- 杭州电子科技大学计算机技术考研总结
- 推荐windows下 DNS本地化工具 TreeWalk DNS 8.21
- Ubuntu问题:E45: ‘readonly‘ option is set (add ! to override)错误解决
- Tensorflow 版本切换与 slim 问题
- 百度地图API 浏览器端调用 傻瓜教程