tnblog
首页
视频
资源
登录

ASP.NET Core 作用域与对象释放行为 (基础)[学习笔记]

6395人阅读 2020/5/9 13:36 总访问:3465065 评论:0 收藏:0 手机
分类: .net后台框架

.netcore

ASP.NET Core 作用域与对象释放行为 (基础)[学习笔记]


知识大纲


作用域

  • IServiceScope

实现IDisposable接口类型的释放

  • DI只负责释放由其创建的对象实例
  • DI在容器或子容器释放时,释放由其创建的对象实例



代码准备


项目结构

项目结构

项目中相关代码


OrderService.cs
  1. public interface IOrderService
  2. {
  3. }
  4. public class DisposableOrderService : IOrderService, IDisposable
  5. {
  6. public void Dispose()
  7. {
  8. Console.WriteLine($"DisposableOrderService Disposed:{this.GetHashCode()}");
  9. }
  10. }
WeatherForecastController.cs
  1. [HttpGet]
  2. public int Get(
  3. [FromServices]IOrderService orderService,
  4. [FromServices]IOrderService orderService2,
  5. [FromServices]IHostApplicationLifetime hostApplicationLifetime,
  6. [FromQuery]bool stop = false
  7. )
  8. {
  9. #region
  10. Console.WriteLine("=======1=========="+ " orderService :"+ orderService.GetHashCode());
  11. using (IServiceScope scope = HttpContext.RequestServices.CreateScope())
  12. {
  13. var service = scope.ServiceProvider.GetService<IOrderService>();
  14. var service2 = scope.ServiceProvider.GetService<IOrderService>();
  15. Console.WriteLine("=======2==========" + " service :" + service.GetHashCode());
  16. Console.WriteLine("=======2==========" + " service2 :" + service2.GetHashCode());
  17. }
  18. Console.WriteLine("=======3==========" + " orderService2 :" + orderService2.GetHashCode());
  19. #endregion
  20. #region
  21. if (stop)
  22. {
  23. hostApplicationLifetime.StopApplication();
  24. }
  25. #endregion
  26. Console.WriteLine("接口请求处理结束");
  27. return 1;
  28. }
Startup.cs
  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddTransient<IOrderService, DisposableOrderService>();
  4. //services.AddSingleton<IOrderService>(p=>new DisposableOrderService());
  5. //services.AddScoped<IOrderService, DisposableOrderService>();
  6. services.AddControllers();
  7. }
  8. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  9. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime hostApplicationLifetime)
  10. {
  11. //var s = app.ApplicationServices.GetService<IOrderService>();
  12. //var s2 = app.ApplicationServices.GetService<IOrderService>();
  13. if (env.IsDevelopment())
  14. {
  15. app.UseDeveloperExceptionPage();
  16. }
  17. app.UseRouting();
  18. app.UseAuthorization();
  19. app.UseEndpoints(endpoints =>
  20. {
  21. endpoints.MapControllers();
  22. });
  23. }


Transient



services.AddTransient<IOrderService, DisposableOrderService>();



Singleton



services.AddSingleton<IOrderService>(p=>new DisposableOrderService());



Scoped



services.AddScoped<IOrderService, DisposableOrderService>();



从上述来看可以清晰的看到对象的释放情况,这里我们可以通过stop为true时再次去观察情况

hostApplicationLifetime.StopApplication(); 关闭当前应用程序


项目地址


GitHub: https://github.com/AiDaShi/GeekTimeLearning


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

C ?、?? 问号和2个问号的用法类型?、对象?

C# ?C# ???:单问号1.定义数据类型可为空。可用于对int,double,bool等无法直接赋值为null的数据类型进行null的赋值如这...

Python实例 1-日志抓取处理 补错附日志小技巧

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

C 数组拆分泛型

主要用到了泛型。泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值...

MySQL 视图的增删改 查

要显示视图的定义,需要在SHOWCREATEVIEW子句之后指定视图的名称, 我们先来创建几张表,完事后在进行演示:--用户信息表...

使用NPOI导出excel包括图片

Excl模板导出相信我们都会,那么模板上要导出图片呢?嗯~还是来个例子:准备工作:首先要引用NPOI包:然后获取数据集(我这...

ajaxSubmit异步上传图片嘘,外面都是假的

引用代码&lt;scriptsrc=&quot;/Scripts/jquery.form.js&quot;&gt;&lt;/script&gt;js就在旁边img链接中,只不过大小为0x0,...

.net MVC 使用百度编辑器详细教程:1配置编辑器

一、什么是百度编辑器百度编辑器UEditor是由百度web前端研发部开发一款应用于网站的编辑器,具有轻量,可定制,注重用户体...

使用jquery操作元素的css样式获取、修改等等

使用jquery操作元素的css样式(获取、修改等等) //1、获取和设置样式 $(&quot;#tow&quot;).attr(&quot;class&quot;)...

.net辗转java系列视野

.net辗转java系列(一)视野.net系java系其它语言C#Java框架.net Framework Standardjava se.net corejava eejave meJava S...

.net MVC json对象或者json对象数组的序列化和反序列化

1、用JSON.stringify()将对象stuarr或者json数组stuarr序列化成字符串,然后提交给后台。$.post(&quot;/home/DoUpdate&quot...

.net MVC json对象或者json对象数组的序列化和反序列化

1、用JSON.stringify()将对象stuarr或者json数组stuarr序列化成字符串,然后提交给后台。$.post(&quot;/home/DoUpdate&quot...

mui框架-移动端跳转以及传值的简单方法修改解决方法

纠结了两天的MUI跳转的问题,终于解决了 ,现在分享给大家,希望大家有什么坑的解决也给我分享分享 哈哈,废话不多说,上代...

MVC全局异常处理错误日记

1、在Filter文件夹中创建一个IsExceptionFilter类(类名随意取)2、使用3、在访问的页面控制器中添加几个错误4、在IsExcept...

MVC全局异常处理错误日记

1、在Filter文件夹中创建一个IsExceptionFilter类(类名随意取)2、使用3、在访问的页面控制器中添加几个错误4、在IsExcept...

Hbuilder打包APP的教程会操作的略过

首先项目必须是APP端的,可能讲解有点啰嗦,讲解准备的工具:HBuilderX(其他版本也可以,这里用X版本来讲解)、待测试手机...
这一世以无限游戏为使命!
排名
2
文章
633
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术