在Angular框架中,经常会使用到@Inject与@Injectable这两个装饰器。它们与框架的依赖注入系统息息相关。

什么是Angular Injector

Injector,注入器。主要工作是负责向服务与组件、指令等注入依赖。Injector主要通过Angular provider中的token进行查找需要注入的依赖。Angular Provider中提供了依赖的相关信息,比如token,创建实例的方式等。Injector通过这些信息进行创建实例,并负责把实例注入到服务、组件、指令中。

什么时候创建Angular Injector

首先,在根模块启动的时候会创建一个注入器,此时这个注入器作用于全局。整个应用会创建一棵组件树,appcomponent为根组件。同样,injector也会配合创建注入器树,为每个组件维护需要注入的内容。

怎么注册需要注入的依赖

可以使用Providers,具体使用provide:[Aservice,Bservice],复杂一点的如providers:[{provide:xxx,useValue:xxx}],还可以useClass,useFactory,以及depths等。这里不再具体展开。

@Injectable

@Injectable装饰器是告诉Angular框架,这个服务或者组件的构造函数的参数需要依赖注入器进行注入。所以如果构造函数中没有参数,可以无需@Injectable装饰器。组件和指令为什么没有@Injetable也能注入构造函数中的参数?因为@Component和@Directive装饰器也具备告知框架构造函数参数需要依赖注入,所以无需再组件、指令中使用@Injectable装饰器。

@Inject

@Inject是构造函数参数的注入器。@Inject(token) private ualue:ValueType,它告诉Angular框架需要从注入器中获取token对应的一个实例进行注入。所以如果我们在一个服务中的构造函数中依赖注入参数,也可以不使用@Injectable装饰器,可以直接在参数中使用@Inject(Aservice) private aService: Aservice进行注入。

@Inject与@Injectable相关推荐

  1. @javax.inject.Inject,新的注入依赖规范

    这个是 Java EE 6 规范 JSR 330 – Dependency Injection for Java 中的东西,也就是 Java EE 的依赖注入. Spring自带的@Autowired ...

  2. Angular 小专题:玩转注射器

    课程介绍 2009 年 AngularJS 第一个把"依赖注入"机制引入到了前端开发中,开创了用后端设计思想大规模入侵前端领域的先河. 如果没有深入使用过 Spring 框架,&q ...

  3. Eclipse Theia 揭秘之启动流程篇

    前言 在<Eclipse Theia 框架技术架构揭秘>一文中简单介绍了 Theia 框架整体的技术架构,接下来将通过系列文章从源码角度入手看一下 Theia 核心设计思路,本文从启动流程 ...

  4. NestJs学习总结篇

    原文地址 http://blog.poetries.top/2022/05/25/nest-summary Nest (NestJS) 是一个用于构建高效.可扩展的 Node.js 服务器端应用程序的 ...

  5. Unable to inject views for BcFragment{8d4c0 #1 id=0x7f0d00a1}

    这个问题一般都是插入错误引起的, 当提示 ButterKnife.inject(this,sellerLayout); 这行的时候你需要查看 @InjectView(R.id....) 插入的对不对 ...

  6. Vue子组件调用父组件方法并传参的5种方式:$emit触发、传入子组件function、访问父组件$parent.function、用inject关联父组件provide的方法、用window.fun

    如需了解老子怎么控制儿子的,传送门:https://s-z-q.blog.csdn.net/article/details/119922715 子组件child.vue <template> ...

  7. provide和inject,Vue父组件直接给孙子组件传值

    Provide / Inject 该页面假设你已经阅读过了组件基础.如果你还对组件不太了解,推荐你先阅读它. 通常,当我们需要从父组件向子组件传递数据时,我们使用 props.想象一下这样的结构:有一 ...

  8. Mobx入门之三:Provider inject

    2019独角兽企业重金招聘Python工程师标准>>> 上一节中<App/>组件传递状态temperatures给children -- <TemperatureI ...

  9. Webpack 的 HtmlWebpackPlugin 如何控制某个 chunks 的 inject 位置?

    https://segmentfault.com/q/1010000006591131 通过修改 HtmlWebpackPlugin 源码实现了 修改后的配置: new HtmlWebpackPlug ...

最新文章

  1. 重新启动Office 365迁移任务
  2. linux sockaddr_in头文件,linux网络编程常用头文件
  3. ItChat与图灵机器人的结合
  4. 深入浅出LVS:企业集群平台负载均衡的三种模式和算法实现
  5. 让网站性能最佳的34条黄金守则
  6. MySQL实战 | 01 当执行一条 select 语句时,MySQL 到底做了啥?
  7. hdu 1559 最大子矩阵(DP)
  8. C++11 double转化为string
  9. 在Windows下启动java服务
  10. cc1101 使用笔记
  11. mui如何对接java后台_MUI框架-09-MUI 与后台数据交互
  12. 24节气—小雪海报、文案分享。雨凝成雪,万物冬藏。
  13. 【数字信号处理】基本序列 ( 复指数序列 | 单位复指数序列 | 复变函数欧拉公式 )
  14. android 阻尼回弹,Android ListView实现阻尼回弹效果 并去除边缘阴影
  15. 前端自学驿站:【建议收藏】css晦涩难懂的点都在这啦
  16. 唐读笔记-正则表达式必知必会
  17. memcpy、memmove、memcmp、memset函数的使用说明和模拟实现
  18. CSP 2022 游寄
  19. 如何成为一个更好的Android开发者?写给正在求职的安卓开发
  20. 黑苹果引导工具 Clover 配置详解及Clover Configurator使用

热门文章

  1. 你可知道,让你发胖的食物不是高脂肪食物,而是高碳水化合物
  2. perl脚本语言学习
  3. WIN10企业版系统安装(KB12特供版:采用大白菜启动盘)
  4. Unicode特殊字符编码
  5. WAF是什么东西?!--- 1 waf的功能和用到的技术原理介绍
  6. Qt、GDAL遥感影像显示
  7. 实现unity内2D物品延迟跟随鼠标移动
  8. Python Selenium 字节校招实习岗筛选
  9. Table边框使用总结 ,只显示你要显示的边框
  10. Django之自定义 form 表单上传图片