本文章是我听B站杨中科的所做的笔记

杨中科B站视频链接:.NET 6教程,.Net Core 2022视频教程,杨中科主讲_哔哩哔哩_bilibili

1、概念

生活中的“控制反转”:自己发电和用电网的电

依赖注入是控制反转思想的实现方式

依赖注入简化模块的组装过程,降低模块之间的耦合度

控制反转的两种实现方式:1、服务定位器 2、依赖注入

服务定位器:

IDbConnection conn = ServiceLocator.GetService<IDbConnection>();

依赖注入:

class Demo
{public IDbConnection Conn { get; set; }public void InsertDB(){IDbCommand cmd = Conn.CreateCommand();}
}

2、DI几个概念

服务(service):对象 注册服务; 服务容器:负责管理注册的服务 查询服务:创建对象及关联对象; 对象生命周期:Transient(瞬态);Scoped(范围);Singleton(单例)

3、.net中使用DI

根据类型来获取和注册服务。可以分别指定服务类型(ServiceType)和实现类型(ImplementationType)。这两者可能相同,也可能不同。服务类型可以是类,也可以是接口,建议面向接口编程,更灵活

步骤:

1、Install-Package Microsoft.Extensions.DependencyInjection

2、using Microsoft.Extensions.DependencyInjection

3、ServiceCollection用来构造容器对象ServiceProvider 。调用ServiceCollection的BuildServiceProvider()创建的ServiceProvider,可以用来获取BuildServiceProvider()之前

4、DI生命周期

1、如果一个类实现了IDisposable接口,则离开作用域之后容器会自动调用对象的Dispose方法

2、不要再长生命周期的对象中引用比它短的生命周期的对象。再ASP.NET Core中,这样做默认会抛异常

3、生命周期的选择:如果类无状态,建议为Singleton;如果类有状态,且有Scope控制,建议为Scoped,因为通常这种Scope控制下的代码都是运行在同一个线程中的,没有并发修改的问题;在使用Transient的时候要谨慎

5、DI魅力渐显:依赖注入

1、依赖注入是由传染性的,如果一个类的对象是通过DI类创建的,那么这个类的构造函数中声明的所有服务类型参数都会被DI赋值;但是如果一个对象是程序员手动创建的,那么这个对象就和DI没有关系,它的构造函数中声明的服务类型参数就不会被自动赋值

2、.NET的DI默认是构造函数注入

6、总结

关注于接口,而不是关注于实现,各个服务可以更弱耦合的协同工作。在编写代码的时候,我们甚至不知道具体的服务是什么

第三方DI容器:Autofac等。Autofac优点:支持属性注入、基于名字注入、基于约定的注入等

.NETCore——依赖注入相关推荐

  1. Asp.NetCore依赖注入和管道方式的异常处理及日志记录

    前言     在业务系统,异常处理是所有开发人员必须面对的问题,在一定程度上,异常处理的能力反映出开发者对业务的驾驭水平:本章将着重介绍如何在 WebApi 程序中对异常进行捕获,然后利用 Nlog ...

  2. NetCore 依赖注入之服务之间的依赖关系

    简单介绍,直接官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspn ...

  3. 跟我一起学.NetCore之依赖注入作用域和对象释放

    前言 上一小节简单阐述了依赖注入及Asp.NetCore中自带依赖注入组件的常规用法,其中提到容器管控了自己创建对象的生命周期,包含了三种生命周期:Singleton.Scoped.Transient ...

  4. 跟我一起学.NetCore之依赖注入

    前言 现阶段而言,依赖注入相关组件如果不会用一两个,感觉在Code的世界里肯定是落伍了,最起码得有工厂模式的思想,知道这样做的好处:提及到依赖注入,通常会关联出两个概念:Ioc(控制反转)和DI(依赖 ...

  5. NetCore框架详解 -------四、.NetCore框架对依赖注入原则 的技术实现和运行原理

    前三章主要从理论角度讲述了依赖注入原则及所衍生实现技术和手段产生的原因.发展和当前所处状况.大部分开发人为前三章对自己的技术水平的提高设有立竿见影的直接作用,但的我在里还是要说一下,前三章不但可以使开 ...

  6. .NetCore数据库依赖注入

    这里用的是sqlserver,postgreSQL也可以使用(mysql没试过,不过应该都能用) 1.项目引用Nuget包 我的项目是.net5框架的,所以不是使用的最新的包 1.)引用System. ...

  7. 利用ASP.netCore自带DI(DependencyInjection)实现批量依赖注入

    转载来源 http://www.cnblogs.com/xiaoliangge/p/7642372.html ASP.net Core自带DI(依赖注入),用法如下: services.AddScop ...

  8. .net 调用url接口_.NetCore中Quartz.NET的依赖注入

    更多精彩,请点击上方蓝字关注我们!关于上位机体验课你有两种选择↓:4月20日-24日晚20:00-21:30 介绍 Quartz.NET是一个方便的库,允许您通过实现IJob接口来安排重复任务.然而, ...

  9. .NetCore的依赖注入

    //MVC自带的三种依赖注入方式 //MVC自带的三种依赖注入方式public WeatherForecastController(ILogger<WeatherForecastControll ...

最新文章

  1. 厉害了程序员~凡尔赛文学现作 | 每日趣闻
  2. umdh windbg分析内存泄露
  3. 【性能优化】 之 10053 事件
  4. Polo the Penguin and Matrix
  5. 新iPhone XR全配色曝光:苹果你清醒一点 还在搞配色?
  6. 第2讲 | 区块链到底是怎么运行的?
  7. Julia : 如何利用julia获取Joinquant web api的数据?
  8. 英语单词之说文解字(7)
  9. 【JavaScript】JS中的预解析
  10. java雀圣麻将游戏_《梦幻麻将馆9雀圣争霸》全攻略
  11. 如何快速将pdf转换成excel
  12. 洛谷 P1162填图颜色
  13. unity表情动画与动态捕捉表情
  14. 网页字体弄成微软雅黑html,网页字体替换为微软雅黑
  15. 如何写好一篇论文——闵老师《论文写作》心得
  16. Socket网络编程——C++版源码
  17. 记一次钉钉群聊机器人的开发
  18. 向下取整floor()、向上取整ceil()、截取函数trunc()、四舍五入round()
  19. 打开idea的svn项目弹出Action not found:Subversion.Add提示解决办法
  20. 自然语言处理(NLP)任务中常用的分词工具及底层算法支持

热门文章

  1. 操作系统第五章笔记---线程
  2. c语言记账系统源程序,C语言实现Linux服务端的记账本程序
  3. 基于大模型GPT,如何提炼出优质的Prompt
  4. [Win10] 一键解决Windows10 不能访问局域网的解决方案
  5. Tomcat学习之Tomcat架构
  6. 实例演示Nginx重写(Rewrite)类型last、break、redirect和permanent的区别
  7. 一世12年龄在泥土还在打,硅谷00创业毕竟开始播放!
  8. 2020年10月-北京-天眼查面试题(已offer)
  9. 2016正在远去的消费互联网时代
  10. 互联网最值得加入的173家国企汇总!!