前言
在 C# 中,AddTransient
、AddScoped
、AddSingleton
都可以实现依赖注入,那么三者之间有什么区别呢?本文就对这三者之间的区别进行了简单的总结。
区别
- AddTransient:每次 service 请求都是获得不同的实例。暂时性模式:暂时性对象始终不同,无论是不是同一个请求(同一个请求里的不同服务)同一个客户端,每次都是创建新的实例。
- AddScoped:对于同一个请求返回同一个实例,不同的请求返回不同的实例。作用域模式:作用域对象在一个客户端请求中是相同的,但在多个客户端请求中是不同的。
- AddSingleton:每次都是获得同一个实例。单一实例模式:单一实例对象对每个对象和每个请求都是相同的,可以说是不同客户端不同请求都是相同的。
生命周期
- AddSingleton的生命周期:项目启动-项目关闭 相当于静态类 只会有一个。
- AddScoped的生命周期:请求开始-请求结束 在这次请求中获取的对象都是同一个。
- AddTransient的生命周期:请求获取-(GC回收-主动释放) 每一次获取的对象都不是同一。
由于AddScoped对象是在请求的时候创建的,所以不能在AddSingleton对象中使用,甚至也不能在AddTransient对象中使用。