ASP.NET Core :容器注入(二):生命周期作用域与对象释放
//瞬时生命周期
ServiceCollection services = new ServiceCollection();
services.AddTransient<TestServiceImpl>();
using (ServiceProvider sp = services.BuildServiceProvider())
{
var ts1 = sp.GetRequiredService<TestServiceImpl>();
var ts2 = sp.GetRequiredService<TestServiceImpl>();
Console.WriteLine($"AddTransient注入:{object.ReferenceEquals(ts1, ts2)}");
}
//作用域
services.AddScoped<TestServiceImpl>();
using (ServiceProvider AddScoped = services.BuildServiceProvider())
{
var se = new TestServiceImpl(); //注意长生命周期 不要引用比它短周期
using (IServiceScope scope = AddScoped.CreateScope())
{
var t1 = scope.ServiceProvider.GetService<TestServiceImpl>();
var t2 = scope.ServiceProvider.GetService<TestServiceImpl>();
Console.WriteLine($"AddScoped注入:{object.ReferenceEquals(t1, t2)}");
se = t2;
Console.ReadLine();
}
//作用域
using (IServiceScope scope2 = AddScoped.CreateScope())
{
var ts1 = scope2.ServiceProvider.GetService<TestServiceImpl>();
var ts2 = scope2.ServiceProvider.GetService<TestServiceImpl>();
Console.WriteLine($"AddScoped2注入:{object.ReferenceEquals(se, ts2)}");
Console.ReadLine();
}
}
可以看到同一个using下 是相同的,当用第一个内 去检验下一个 则为False
微软官方推荐 生命周期的选择:如果类无状态,建议为Singleton;如果类有状态,具有Scope 控制,建议为Scoped ,如果没有并发修改的问题,使用Transient的时候要谨慎!
参考:ASP.NET Core 依赖注入
ASP.NET Core :容器注入(二):生命周期作用域与对象释放的更多相关文章
- 2、ASP.NET Core中服务的生命周期
ASP.NET Core支持依赖注入软件设计模式,它允许在不同的组件中注入我们的服务,并且控制服务的初始化.有些服务可以在短时间内初始化,并且只能在某个特别的组件,以及请求中才能用到:而还有一些服务, ...
- Asp.Net Core中服务的生命周期选项区别和用法
在做一个小的Demo中,在一个界面上两次调用视图组件,并且在视图组件中都调用了数据库查询,结果发现,一直报错,将两个视图组件的调用分离,单独进行,却又是正常的,寻找一番,发现是配置依赖注入服务时,对于 ...
- 一图看懂 ASP.NET Core 中的服务生命周期
翻译自 Waqas Anwar 2020年11月8日的文章 <ASP.NET Core Service Lifetimes (Infographic)> [1] ASP.NET Core ...
- Asp.net Core依赖注入(Autofac替换IOC容器)
ASP.NET Core ASP.NET Core (previously ASP.NET 5) 改变了以前依赖注入框架集成进ASP.NET的方法. 以前, 每个功能 - MVC, Web API, ...
- 一文读懂Asp.net core 依赖注入(Dependency injection)
一.什么是依赖注入 首先在Asp.net core中是支持依赖注入软件设计模式,或者说依赖注入是asp.net core的核心: 依赖注入(DI)和控制反转(IOC)基本是一个意思,因为说起来谁都离不 ...
- ASP.NET Core依赖注入——依赖注入最佳实践
在这篇文章中,我们将深入研究.NET Core和ASP.NET Core MVC中的依赖注入,将介绍几乎所有可能的选项,依赖注入是ASP.Net Core的核心,我将分享在ASP.Net Core应用 ...
- ASP.NET Core依赖注入多个服务实现类
依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来. 服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了 ...
- # ASP.NET Core依赖注入解读&使用Autofac替代实现
标签: 依赖注入 Autofac ASPNETCore ASP.NET Core依赖注入解读&使用Autofac替代实现 1. 前言 2. ASP.NET Core 中的DI方式 3. Aut ...
- ASP.NET Core 依赖注入(DI)简介
ASP.NET Core是从根本上设计来支持和利用依赖注入. ASP.NET Core应用程序可以通过将其注入到Startup类中的方法中来利用内置的框架服务,并且应用程序服务也可以配置为注入. AS ...
随机推荐
- python自带gui插件tkinter使用小结
1.tkinter简介 Tkinter(即 tk interface,简称"Tk")本质上是对 Tcl/Tk 软件包的 Python 接口封装,它是 Python 官方推荐的 GU ...
- PHP单粒模式
<?php class C { //三私一公 protected static $_instance = null; protected function __construct() //pro ...
- Docker-Compose和Docker Network的应用
1 # Docker-Compose分为两部分 2 # 一.Docker-Compose.yml 3 # 二.Docker-Compose 命令 4 5 # 桌面板的Docker(Win.Mac)会默 ...
- Vue3系列11--Teleport传送组件
Teleport 是一种能够将我们的模板移动到 DOM 中 Vue app 之外的其他位置的技术,不受父级style.v-show等属性影响,但data.prop数据依旧能够共用的技术:类似于 Rea ...
- 深入理解Spring注解机制(一):注解的搜索与处理机制
前言 众所周知,spring 从 2.5 版本以后开始支持使用注解代替繁琐的 xml 配置,到了 springboot 更是全面拥抱了注解式配置.平时在使用的时候,点开一些常见的等注解,会发现往往在一 ...
- 使用Linux、Nginx和Github Actions托管部署ASP.NET Core 6.0应用
使用Linux.Nginx和Github Actions托管部署ASP.NET Core 6.0应用 前言 本文主要参考微软这篇文档而来 Host ASP.NET Core on Linux with ...
- PowerPoint 母版与版式
母版 使用母版可以对幻灯片进行统一的样式编辑,让幻灯片具有相同的外观效果,这样无须在多张幻灯片上重复输入相同的信息.母版分为幻灯片母版.讲义母版和备注母版. 幻灯片母版 幻灯片母版决定着幻灯片的外观, ...
- Rust实战系列-基本语法
本文是<Rust in action>学习总结系列的第二部分,更多内容请看已发布文章: 一.Rust实战系列-Rust介绍 " 主要介绍 Rust 的语法.基本类型和数据结构,通 ...
- Hadoop的由来、Block切分、进程详解
Hadoop的由来.Block切分.进程详解 一.hadoop的由来 Google发布了三篇论文: GFS(Google File System) MapReduce(数据计算方法) BigTable ...
- [CF1538G] Gift Set (数学简单题)
题面 相信英文题面也很好理解 有 x \tt x x 个红糖, y \tt y y 个蓝糖.每一个礼包里面要么有 a \tt a a 个红糖+ b \tt b b 个蓝糖,要么是 a \tt a a ...