netcore中依赖注入那点事

今天来讲讲我对netcore中ioc的理解

注:下面所说的服务也指类,因为开发中常把service层的类说成服务,完全可以理解为一个类

概念

IOC(Inversion of Control)控制反转

传统应用程序由类内部主动创建依赖对象,也就是通过new来生成,而IOC把创建对象的权利转交给IOC容器,查找依赖对象的权力也转交给IOC,由容器进行注入组合对象

服务定位器

服务定位器是指定对象类型,服务定位器直接生成。就是netcore中的GetService<>()获取的对象

DI

DI是我只要声明对象类型,具体对象由框架自动生成。就是netcore中我们构造函数自动赋予的对象。

为什么使用IOC

使用new方法构建的对象会产生高耦合,再代码更改时需要全部更改new对象,容易漏改,工作量也很大

DI使用

总得来说就两步,一是注入服务,二是从IOC容器中获取服务
常规用法:

  1. new serviceCollection(),生成serviceCollection对象
  2. serviceCollection对象使用AddService()方法添加对象类型
  3. 服务中声明对象类型,在构造函数中赋值即可

服务定位器用法:

  1. 注入服务,如上1-2
  2. serviceCollection调用BuilderServiceProvider()构建一个serviceProvider从中获取对象
  3. serviceProvider调用GetService<>()获取对象

扩展方法

便于使用serviceCollection直接AddXX生成对象,封装服务注入的过程

  1. 类修改为static类,AddXX方法修改static方法
  2. 方法中添加this serviceCollection参数

生命周期

生命周期是每个对象的生死时期,netcore中有3种生命周期,包括Transient,Scoped,Singleton

  • Transient:每次获取该类型的对象都是重新构建的对象
  • Scoped:在一个范围内是该类型对象是同一个对象,在Netcore中的范围就是一次请求
  • Singleton:每次获取该对象都是同一个对象

注意

  • 注入对象可以注入该类型也可以注入接口,推荐使用接口注入,面向接口编程
  • sp.GetRequiredService<ITestService>()sp.GetService<ITestService>()的不同指出在于,前者没注入该类型会抛异常,建议使用sp.GetRequiredService<ITestService>()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值