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:这种模式下,不管是不是同一个请求,每次都会新建一个新的服务实例;这种是最常见的,并且是安全的选择,如果你担心多线程的问题的话。

最新文章

  1. Java框架重量级,轻量级的问题?
  2. js浏览器窗口
  3. SQL Server 索引中include的魅力(具有包含性列的索引)
  4. 至强CPU性能排行,从X3210起,由低至高排列。
  5. ASP.NET 中DataGrid item 绑定方法
  6. js中的forin
  7. ssh非交互式密码输入
  8. MFC 数据库编程 增删改查的一个例子
  9. android--listview设置高度
  10. list.add(),向List集合插入对象报空指针异常
  11. struts异常:Caused by: Parent package is not defined: json-default - [unknown location]解决办法
  12. Week1绪论--抽象数据类型
  13. Android FrameWork浅识
  14. Spring Boot HikariCP 一 ——集成多数据源
  15. 卸载(uninstalled)Mac os Jenkins pkg 安装包
  16. Java学习笔记(四)——好记性不如烂键盘(答答租车)
  17. eclipse报错:Could not resolve bean definition resource pattern [classpath:spring/applicationContext-*.xml]或者找不到
  18. MP4介绍与基本AVC编码(x264)教程
  19. LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS
  20. 关于CreateProcess函数一些经验

热门文章

  1. HTML5中对于块级元素和行内元素的总结
  2. Basic认证时添加请求头
  3. .NET gRPC 核心功能初体验,附Demo源码
  4. 使用syncthing和蒲公英异地组网零成本实现多设备实时同步
  5. Zeebe服务学习1-简单部署与实现demo
  6. ModuleNotFoundError: No module named &#39;django&#39;
  7. CSS基础 和 font字体、背景属性连写 与 清除浮动方法
  8. 通达OA 页面敏感信息-2013/2015版本
  9. ThinVnc-身份验证绕过(CVE-2019-17662)
  10. P2731 骑马修栅栏 Riding the Fences 题解(欧拉回路)