angular的几种依赖注入方式
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的几种依赖注入方式相关推荐
- spring四种依赖注入方式
平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. spring提出了依赖注入的思想,即依赖不由程序 ...
- Spring中IoC两种接口和两种依赖注入方式的比较
spring是一个开源框架,是为了解决企业应用程序开发的复杂性而创建的,为J2EE应用程序开发提供集成的框架.简单来说,spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架.spring ...
- ASP.NET Core应用的7种依赖注入方式
ASP.NET Core框架中的很多核心对象都是通过依赖注入方式提供的,如用来对应用进行初始化的Startup对象.中间件对象,以及ASP.NET Core MVC应用中的Controller对象和V ...
- 【闲谈】论Spring的三种依赖注入方式
知识点科普: IOC和DI:IOC是控制反转,DI是依赖注入.DI是行为,而IOC是实现这一行为的容器. 循环依赖:指类与类之间互相依赖的情况,比如有类A和类B,类A中依赖类B,类B中依赖类A,由此导 ...
- spring常用的三种依赖注入方式
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...
- 所需依赖_注意细节,阿里架构师一文详解SpringDI的四种依赖注入方式
SpringDI(依赖注入) 一.DI概述 Dependency Injection即为依赖注入,简称DI. 简单来说,在Spring创建对象的同时,为其属性赋值,称之为依赖注入. 形象来说,组件之间 ...
- Spring 的3种依赖注入方式
1.属性注入: 通过setter方法注入Bean的属性值或依赖的对象 属性注入使用<proper>元素,使用Bean属性指定Bean的属性名称,value属性或<Value>子 ...
- DI的三种依赖注入方式和底层实现
bean 标签来表示一个对象:id 是一个对象的唯一标识:class 是类的全路径: 为对象的属性赋值 1. 设值注入 底层实现set方法赋值 ref 引用其它对象,对象的嵌套 2. 构造注入 底层实 ...
- 两种依赖注入的类型是什么?
两种依赖注入的类型分别是setter注入和构造方法注入. setter注入: 一般情况下所有的java bean, 我们都会使用setter方法和getter方法去设置和获取属性的值,示例如下: pu ...
最新文章
- python 浮点数未解之谜
- Docker系列 五.Docker容器数据卷
- Android无法访问本地服务器(localhost)的解决方案
- win32: 查询滚动条相关信息的注意事项
- rcp(插件开发) 如何查找自己定义的扩展点
- html.renderaction 控制器,Html.RenderAction简单用法
- Android 动画(一)
- 培训师 每小时多少钱_每个产品设计师需要了解的品牌知识
- swool tcp mysql_swoole/mysql(异步)
- 滴滴“负重”387天
- CentOS6.6部署VNC服务端
- ubuntu修改配置IP地址和DNS的方法总结(4种)
- 如何将png图像转换成jpg格式呢?
- 用Xcode构建猜国旗游戏案例分享
- 基于VS + Qt编程的UG/NX二次开发
- excel合并工作簿
- html5获取经纬度页面,html5获取经纬度
- mysql salve从库设置read only 属性
- 解决bmp图片文件宽度不是4的倍数
- 屏蔽去除CSDN上图片轮播形式的百度推广广告-20190104更新
热门文章
- ASEMI-B7整流桥输出是几伏
- 常用IDE快捷键整理
- 多核cpu应用场景_2019电脑CPU怎么选_多核cpu和单核的区别|哪个好-太平洋电脑网...
- 广域网技术之HDLC和ppp原理与配置
- 远程数据库链接安全性_远程工作面临着隐藏的挑战数据安全性是专家如何克服的挑战
- Intellij IDEA查看所有断点
- 群晖NAS教程(八)、利用Docker安装chevereto图床并进行远程访问
- Hadoop--yarn--MapReduce安装配置
- 育儿:自制身高仪和照片墙
- 怎么在微信接收邮箱信息