嵌套的服务依赖

如一个component的构造函数里依赖A,B两个服务

// component的构造函数
constructor(a: A, public b: B) { }

而B服务转而依赖A,C两个服务

// B服务的构造函数
@Injectable({providedIn: 'root'
})
export class B{constructor(private a: A, private c: C) {}
}

当 Angular 新建Component时,依赖注入框架会先创建一个A的实例,然后创建B实例。而创建B也需要框架刚刚创建的这个A实例,因此框架为它提供同一个实例,不需要重新创建。B还需要服务C,所以依赖注入框架可以直接new出该类的一个实例,并把它提供给B的构造函数。

而父组件 Component 不需要了解这些依赖的依赖。 只要在构造函数中声明自己需要的依赖即可(这里是 AB),框架会帮你解析这些嵌套的依赖。

限制服务的范围

同Angular应用程序的组件树一样,依赖注入器也是一个同组件平行的树状结构,每个注入器都会创建依赖的实例,然后在该注入器的范围内,提供同一个实例。

但是如果他也是个树状结构,每层可能都会有一个注入器,然后在这些注入器都有服务A的依赖,那也就有可能存在多个A实例。

由根注入器提供的依赖可以注入到应用中任何地方的任何组件中。 但有时候你可能希望把服务的有效性限制到应用程序的一个特定区域。

  • 通过在组件树的子级根组件中提供服务,可以把一个被注入服务的作用域局限在应用程序结构中的某个分支中,并不被同级或其他的服务所污染。(在平行创建的多个相同组件中,创建多个平级相同的服务,且互不污染,即沙箱式隔离)。
@Component({selector: 'app-test',providers: [A]
})
export class appTestComponent implements OnInit {constructor(private a: A) { }
}

angular 注入器配置_Angular 的服务逻辑相关推荐

  1. angular 注入器配置_Angular依赖注入介绍

    依赖注入(DI -- Dependency Injection)是一种重要的应用设计模式.Angular里面也有自己的DI框架,在设计应用时经常会用到它,它可以我们的开发效率和模块化程度. 依赖,是当 ...

  2. angular 注入器配置_angular依赖注入

    一.imports,declarations,providers介绍 imports中写入的是当前模块导入的其他模块,故imports应该导入的是module:declarations中写入的是当前模 ...

  3. angular 注入器配置_Angular injector注入器

    var app = angular.module('myApp', ['ng']); //通过service方法创建自定义服务 app.service('$test', function () { t ...

  4. angular 注入器配置_Angular 教程:异步加载和依赖注入

    我已经受够了用hard-coded数据来写应用...现在我们来尝试使用Angular提供的$http服务来从后台抓取一个大一点的数据集.我们会使用依赖注入的方式来给PhoneListCtrl控制器提供 ...

  5. angular 注入器配置_Angular2 多级注入器详解及实例

    angular2 的依赖注入包含了太多的内容,其中的一个重点就是注入器,而注入器又非常难理解,今天我们不深入介绍注入器的内容,可以参考官方文档,我们今天来说注入器的层级. 也就是组件获取服务的容器会选 ...

  6. angular 注入器配置_注入器和发布库–AngularJS学习笔记(三)

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. AngularJS的一大特性就是Module的加载和依赖注入,本文将分析一 ...

  7. seata-server没有从nacos配置中心读取配置_微服务新秀之Nacos,看了就会,我说的

    再讲 Nacos 之前,我们需要了解什么是 Nacos:Nacos 是阿里的一个开源产品,它是针对微服务架构中的 服务发现.配置管理.服务治理 的综合性解决方案. 官网给出的回答: Nacos 致力于 ...

  8. .net5+nacos+ocelot 配置中心和服务发现实现

    相关文章:手动造轮子--为Ocelot集成Nacos注册中心 出处:https://www.cnblogs.com/buruainiaaaa/p/14121176.html 作者:唐@ 最近一段时间 ...

  9. centos7 systemctl配置开机自启动服务

    centos7 systemctl配置开机自启动服务 centos7使用systemctl替代原来/etc/init.d,按官方的说法是提高系统服务的运行效率.服务配置更加简单易用,对于一些自定义的服 ...

  10. WCF一个运行环境,一个服务逻辑人,一个客户

    该例子的过程是:服务逻辑人有了本事,服务通信人和他建立联系.客户指定服务逻辑人,指派客户通信人与服务通信人接触,使用服务逻辑人的本事. 先教服务逻辑人本事.注意先新建类库,再在类库中新建类. 服务逻辑 ...

最新文章

  1. 国际基因编辑科技发展报告
  2. java设计模式 观察者模式_理解java设计模式之观察者模式
  3. 多因素方差分析_方差分析入门
  4. webbench网站压力测试工具的使用方法
  5. Leetcode-13. 罗马数字转整数(C++)
  6. 基于WebRTC的互动直播实践
  7. 电脑环境变量设置 java_如何设置自己电脑的系统环境变量?
  8. Python爬虫_Requests
  9. 网络编程基础概念-网络协议
  10. 190518每日一句
  11. 2014年视频聊天室开发经验分享
  12. 中国医科大学网络教育学院试卷计算机,中国医科大学网络教育学院补考试卷
  13. 【MMDetection3D】基于单目(Monocular)的3D目标检测入门实战
  14. ubuntu安装firefox flash插件
  15. 0.5mm间距BGA芯片的PCB设计
  16. 计算机快捷键大全、新手必备
  17. Redis (二) 数据库
  18. ByteBuffer和String互转
  19. LeetCode刷题之575.分糖果
  20. 信安学习-day15

热门文章

  1. jaxb xml 生成 java_java-如何使用JAXB定制XML导出
  2. nginx php重定向,nginx如何重定向信息
  3. C程序设计--指针(对 “ 数组 ” 进行输入输出操作)
  4. es6箭头函数_如何优雅地使用 ES6 箭头函数
  5. C++:以空格分隔的字符串的输入输出
  6. .net from 关闭事件_libVLC 事件机制
  7. c语言学号信息管理系统,c语言学籍信息管理系统设计
  8. matlab剪切板中内容清除,如何清空剪贴板内容?剪切板内容清理过程
  9. 蓝桥杯 java 组素数_第四届蓝桥杯javaC组_组素数
  10. 2018计算机本科论文,计算机科学学院关于2018届本科毕业论文(设计)的工作安排...