2_ASP.NET Core依赖注入方式和接收依赖注入的方式

IOC:控制反转
DI: 依赖注入
IOC、DI都是描述同一个事情,只是不同的角度。都是为了解决两个类之间过度耦合的问题。
IOC、DI最重要的作用就是解决耦合的问题,类和类之间依赖于抽象但不依赖于具体的实现。

类交给容器管理还有好处,就是对类的生命周期管理比较方便,比如单例模式,瞬时模式.......,可以在注入的时候确定。

使用依赖注入的步骤:

1:

创建容器,管理容器(在.net core中不需要手动做,已经天然支持。在framework中需要创建比如unity)

2:

配置好类之间的关系(ioc)。如:
image

IUserDAL接口:
image

UserDAL实现接口
image

在Startup类的ConfigureServices方法里配置关系进行注入(把类的关系交给容器管理):
services.AddSingleton<IUserDAL, UserDAL>();

3:

拿到注入类(di) (构造函数注入,手动获取,属性注入)

①构造函数注入
在控制器所在类里创建一个需要被注入的对象的类型的字段当作容器,然后在构造函数里接收并对其字段赋值即可。
image

②手动获取
这种方式比较简单,不用定义字段接收,也不要在构造函数赋值,直接获取即可使用。
image

③属性注入


.net core依赖注入方式:

netCore里都是组件方式,所有的框架都拆为了组件,比如,mvc就被拆分为了一个组件,要使用直接注入该组件即可(如:services.AddMvc())。

AddTransient: 瞬时模式每次请求都是一个新的对象,每次请求都有一个对象的创建和销毁的过程
AddSingleton:单例模式,只有第一次的时候会创建,后面都会只用这个对象
AddScoped:在同一次请求中获取的都是同一个对象
...上述都是同一线程模式的情况.....

证明:
将注入方式改为瞬时模式:
image

然后在控制器里输出这个对象的地址值,每次刷新都是不同的,
image

而将改为AddScoped,则每次刷新都是同一个对象。
image

posted @ 2022-05-04 16:04  青仙  阅读(313)  评论(0编辑  收藏  举报