1、useClass

提供器的一种写法是这样的

providers: [...Service...],

其完全写法为

providers: [{provide:Service,useClass:Service}],

provide提供token而实际使用的服务为useClass声明的服务,下面这种

providers: [{provide:Service,useClass:anotherService}],

如果anotherService需要实现其他的类则要把类中的方法实现如:anotherService实现Service

Service类

import { Injectable } from '@angular/core';@Injectable()
export class ServiceService {constructor() { }methods(){console.log('第一种服务类')}
}

anotherService类

import { Injectable } from '@angular/core';
import {ServiceService} from './service.service';@Injectable()
export class AnotherServiceService implements ServiceService{constructor() { }methods(){console.log('另一服务服务类')}anotherMethods(){console.log('另一服务服务类')}}

同时服务之间也可以互相使用,前提是必须加上@Injectable()装饰器,
使用法跟组件中一样在构造函数中注入服务。

2、值

它的提供器的token为字符串,使用的是useValue,可以是一个对象,也可以是一个值

providers: [{provide:‘IS_Value’,useValue:false}],

注意在组件中获取的方式略有不同,data即为获取到的值

 constructor(@Inject('IS_Value') private data) { }

3、工厂方法定义提供器

工厂方法只会被调用一次写法如下

provides:[{provide:ServiceService,useFactory:()=>{let dev=Math.random()>0.5if(dev){return new ServiceService()}else {return new AnotherServiceService()}}}]

如果工厂函数想要使用提供器的其他服务加入属性deps,并以参数的形式传入

provides:[loggerService,{provide:ServiceService,useFactory:(logger:loggerService)=>{let dev=Math.random()>0.5if(dev){return new ServiceService(logger)}else {return new AnotherServiceService(logger)}}deps:[loggerService]}]

这样就相当于实例化了loggerService,不过条件不简单的是通过一个随机数,我们也可以传进去一个值

provides:[loggerService,{provide:‘IS_Value’,useValue:false}{provide:ServiceService,useFactory:(logger:loggerService,val)=>{let dev=Math.random()>0.5if(dev){return new ServiceService(logger)}else {return new AnotherServiceService(logger)}}deps:[loggerService,'IS_Value']}]

然后工厂函数会根据deps第二个值搜索并把它传给第二个参数

angular的几种依赖注入方式相关推荐

  1. spring四种依赖注入方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. spring提出了依赖注入的思想,即依赖不由程序 ...

  2. Spring中IoC两种接口和两种依赖注入方式的比较

    spring是一个开源框架,是为了解决企业应用程序开发的复杂性而创建的,为J2EE应用程序开发提供集成的框架.简单来说,spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架.spring ...

  3. ASP.NET Core应用的7种依赖注入方式

    ASP.NET Core框架中的很多核心对象都是通过依赖注入方式提供的,如用来对应用进行初始化的Startup对象.中间件对象,以及ASP.NET Core MVC应用中的Controller对象和V ...

  4. 【闲谈】论Spring的三种依赖注入方式

    知识点科普: IOC和DI:IOC是控制反转,DI是依赖注入.DI是行为,而IOC是实现这一行为的容器. 循环依赖:指类与类之间互相依赖的情况,比如有类A和类B,类A中依赖类B,类B中依赖类A,由此导 ...

  5. spring常用的三种依赖注入方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...

  6. 所需依赖_注意细节,阿里架构师一文详解SpringDI的四种依赖注入方式

    SpringDI(依赖注入) 一.DI概述 Dependency Injection即为依赖注入,简称DI. 简单来说,在Spring创建对象的同时,为其属性赋值,称之为依赖注入. 形象来说,组件之间 ...

  7. Spring 的3种依赖注入方式

    1.属性注入: 通过setter方法注入Bean的属性值或依赖的对象 属性注入使用<proper>元素,使用Bean属性指定Bean的属性名称,value属性或<Value>子 ...

  8. DI的三种依赖注入方式和底层实现

    bean 标签来表示一个对象:id 是一个对象的唯一标识:class 是类的全路径: 为对象的属性赋值 1. 设值注入 底层实现set方法赋值 ref 引用其它对象,对象的嵌套 2. 构造注入 底层实 ...

  9. 两种依赖注入的类型是什么?

    两种依赖注入的类型分别是setter注入和构造方法注入. setter注入: 一般情况下所有的java bean, 我们都会使用setter方法和getter方法去设置和获取属性的值,示例如下: pu ...

最新文章

  1. python 浮点数未解之谜
  2. Docker系列 五.Docker容器数据卷
  3. Android无法访问本地服务器(localhost)的解决方案
  4. win32: 查询滚动条相关信息的注意事项
  5. rcp(插件开发) 如何查找自己定义的扩展点
  6. html.renderaction 控制器,Html.RenderAction简单用法
  7. Android 动画(一)
  8. 培训师 每小时多少钱_每个产品设计师需要了解的品牌知识
  9. swool tcp mysql_swoole/mysql(异步)
  10. 滴滴“负重”387天
  11. CentOS6.6部署VNC服务端
  12. ubuntu修改配置IP地址和DNS的方法总结(4种)
  13. 如何将png图像转换成jpg格式呢?
  14. 用Xcode构建猜国旗游戏案例分享
  15. 基于VS + Qt编程的UG/NX二次开发
  16. excel合并工作簿
  17. html5获取经纬度页面,html5获取经纬度
  18. mysql salve从库设置read only 属性
  19. 解决bmp图片文件宽度不是4的倍数
  20. 屏蔽去除CSDN上图片轮播形式的百度推广广告-20190104更新

热门文章

  1. ASEMI-B7整流桥输出是几伏
  2. 常用IDE快捷键整理
  3. 多核cpu应用场景_2019电脑CPU怎么选_多核cpu和单核的区别|哪个好-太平洋电脑网...
  4. 广域网技术之HDLC和ppp原理与配置
  5. 远程数据库链接安全性_远程工作面临着隐藏的挑战数据安全性是专家如何克服的挑战
  6. Intellij IDEA查看所有断点
  7. 群晖NAS教程(八)、利用Docker安装chevereto图床并进行远程访问
  8. Hadoop--yarn--MapReduce安装配置
  9. 育儿:自制身高仪和照片墙
  10. 怎么在微信接收邮箱信息