对三种依赖注入生命周期的理解
Posted kit-l
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对三种依赖注入生命周期的理解相关的知识,希望对你有一定的参考价值。
参考文档:
https://www.yoyomooc.com/yoyomooc/aspnet-core-for-beginners-Dependency-Injection
AddSingleton()
文档中:
AddSingleton()方法创建一个Singleton服务。首次请求时会创建Singleton服务。然后,所有后续请求都使用相同的实例。因此,通常,每个应用程序只创建一次Singleton服务,并且在整个应用程序生命周期中使用该单个实例。
个人理解:每个项目跑起来之后,一旦生命周期为Singleton的服务被创建出来,就一直使用这一个,直到项目被停止运行或者删除,这个服务就被销毁。
AddTransient()
文档中:
AddTransient() 方法可以称作:暂时性模式,会创建一个 Transient 服务。每次请求时,都会创建一个新的 Transient 服务实例。
个人理解:用户的每一个HTTP请求,使用到了一个生命周期为Transient的服务,这个服务就被创建一次,使用完成后销毁。
AddScoped()
文档中:
AddScoped()方法创建一个 Scoped 服务。在范围内的每个请求中创建一个新的 Scoped 服务实例。例如,在 Web 应用程序中,它为每个 http 请求创建 1 个实例,但在同一 Web 请求中的其他调用中使用相同的实例,在一个客户端请求中是相同的,但在多个客户端请求中是不同的。
个人理解:客户端A使用该软件时,使用生命周期为Scoped的服务,只创建一次,客户端A结束Web访问后被销毁。客户端A与客户端B同时使用该服务时,是创建的两个服务,并不共用一个。
因为我的开发经验很少,对这几种生命周期基本没有自己的理解,如果我理解错了,希望朋友们可以在评论区中提醒我,谢谢大家。后续我有更正确的理解或者更详细的理解,会补充在博客中。
以上是关于对三种依赖注入生命周期的理解的主要内容,如果未能解决你的问题,请参考以下文章
Spring -- Spring配置文件详解(Bean实例化的三种方式IoC(控制反转) 与 DI(依赖注入)依赖注入详解)