2、ASP.NET Core中服务的生命周期
2024-09-02 17:59:21
ASP.NET Core支持依赖注入软件设计模式,它允许在不同的组件中注入我们的服务,并且控制服务的初始化。有些服务可以在短时间内初始化,并且只能在某个特别的组件,以及请求中才能用到;而还有一些服务,仅仅只用初始化一次,就可以在整个应用程序中使用。
下面我就讲一讲ASP.NET Core中服务的生命周期。
Singleton --单例模式
只有一个服务的实例被创建,这个实例,存储在内存中,可以在整个应用程序中使用。我们可以对一些初始化代价比较大的服务,使用Singleton模式。在代码中可以这样:
services.AddSingleton<IProductService, ProductService>();
Scoped --作用域
这种模式下,将会为每一个请求,都创建一个服务的实例。所有同一个请求中的中间件、MVC控制器,等等,都会得到一个相同的服务实例。Entity Framework Context就是一个Scoped服务最好的参考例子。我们可以通过使用AddScoped方法来使用Scoped模式:
services.AddScoped<IProductService, ProductService>();
Transient --短暂的、瞬变的
Transient模式下,服务每次被请求的时候,都会创建一个服务实例,这种模式特别适合轻量级、无状态的服务。我们可以使用AddTransient方法,来注入服务:
services.AddTransient<IProductService, ProductService>();
如果你想将上面我讲到的概念形象化,那么下面的图标就是你快速参考的一个例子。
对下面图标的解释说明:
- Singleton:单例模式下的服务,只有一个服务实例,所有的请求,都是共享着一个服务实例;这种模式下,我们需要并发以及多线程的问题;
- Scoped:为每个请求都创建一个服务的实例,并且在这个请求中,都是可以多次重复使用这个服务实例;每个请求,可以看做一个作用域。request1可以使用服务1的实例,request2可以使用服务2的实例互不干涉;
- Transient:这种模式下,不管是不是同一个请求,每次都会新建一个新的服务实例;这种是最常见的,并且是安全的选择,如果你担心多线程的问题的话。
最新文章
- Java框架重量级,轻量级的问题?
- js浏览器窗口
- SQL Server 索引中include的魅力(具有包含性列的索引)
- 至强CPU性能排行,从X3210起,由低至高排列。
- ASP.NET 中DataGrid item 绑定方法
- js中的forin
- ssh非交互式密码输入
- MFC 数据库编程 增删改查的一个例子
- android--listview设置高度
- list.add(),向List集合插入对象报空指针异常
- struts异常:Caused by: Parent package is not defined: json-default - [unknown location]解决办法
- Week1绪论--抽象数据类型
- Android FrameWork浅识
- Spring Boot HikariCP 一 ——集成多数据源
- 卸载(uninstalled)Mac os Jenkins pkg 安装包
- Java学习笔记(四)——好记性不如烂键盘(答答租车)
- eclipse报错:Could not resolve bean definition resource pattern [classpath:spring/applicationContext-*.xml]或者找不到
- MP4介绍与基本AVC编码(x264)教程
- LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS
- 关于CreateProcess函数一些经验
热门文章
- HTML5中对于块级元素和行内元素的总结
- Basic认证时添加请求头
- .NET gRPC 核心功能初体验,附Demo源码
- 使用syncthing和蒲公英异地组网零成本实现多设备实时同步
- Zeebe服务学习1-简单部署与实现demo
- ModuleNotFoundError: No module named &#39;django&#39;
- CSS基础 和 font字体、背景属性连写 与 清除浮动方法
- 通达OA 页面敏感信息-2013/2015版本
- ThinVnc-身份验证绕过(CVE-2019-17662)
- P2731 骑马修栅栏 Riding the Fences 题解(欧拉回路)