2_ASP.NET Core依赖注入方式和接收依赖注入的方式
IOC:控制反转
DI: 依赖注入
IOC、DI都是描述同一个事情,只是不同的角度。都是为了解决两个类之间过度耦合的问题。
IOC、DI最重要的作用就是解决耦合的问题,类和类之间依赖于抽象但不依赖于具体的实现。
类交给容器管理还有好处,就是对类的生命周期管理比较方便,比如单例模式,瞬时模式.......,可以在注入的时候确定。
使用依赖注入的步骤:
1:
创建容器,管理容器(在.net core中不需要手动做,已经天然支持。在framework中需要创建比如unity)
2:
配置好类之间的关系(ioc)。如:
IUserDAL接口:
UserDAL实现接口
在Startup类的ConfigureServices方法里配置关系进行注入(把类的关系交给容器管理):
services.AddSingleton<IUserDAL, UserDAL>();
3:
拿到注入类(di) (构造函数注入,手动获取,属性注入)
①构造函数注入
在控制器所在类里创建一个需要被注入的对象的类型的字段当作容器,然后在构造函数里接收并对其字段赋值即可。
②手动获取
这种方式比较简单,不用定义字段接收,也不要在构造函数赋值,直接获取即可使用。
③属性注入
.net core依赖注入方式:
netCore里都是组件方式,所有的框架都拆为了组件,比如,mvc就被拆分为了一个组件,要使用直接注入该组件即可(如:services.AddMvc())。
AddTransient: 瞬时模式每次请求都是一个新的对象,每次请求都有一个对象的创建和销毁的过程
AddSingleton:单例模式,只有第一次的时候会创建,后面都会只用这个对象
AddScoped:在同一次请求中获取的都是同一个对象
...上述都是同一线程模式的情况.....
证明:
将注入方式改为瞬时模式:
然后在控制器里输出这个对象的地址值,每次刷新都是不同的,
而将改为AddScoped,则每次刷新都是同一个对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本