首页 > 编程语言 >ASP.NET Core :容器注入(二):生命周期作用域与对象释放

ASP.NET Core :容器注入(二):生命周期作用域与对象释放

时间:2022-08-18 17:11:21浏览次数:77  
标签:Core ASP Console 作用域 ServiceProvider services using var AddScoped

//瞬时生命周期
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 依赖注入


标签:Core,ASP,Console,作用域,ServiceProvider,services,using,var,AddScoped
From: https://www.cnblogs.com/Bo-H/p/16599363.html

相关文章

  • .NET Core:中间件系列(三):中间件限流
    中间件微软官网定义:中间件中间件意思就是处理请求和响应的软件:1、选择是否将请求传递到管道中的下一个组件。2、可在管道中的下一个组件前后执行工作。对中间件类......
  • asp.net获取当前网址url (2018-11-02 14:49:45)
    设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli "http://"是协议名 "www.jb51.net"是域名 "aaa"是站点名 "bbb.aspx"是页面名(文件名) "id=......
  • 13、名称空间与作用域
    13、名称空间与作用域 目录:一名称空间1.1内建名称空间1.2全局名称空间1.3局部名称空间二作用域2.1全局作用域与局部作用域2.2作用域与名......
  • 在asp.net中开启后台任务
    开始后台任务一般是Task.Run()查在asp.net时进行可能会被回收,导致Task中断。在Asp,net中有专门的后台任务函数: System.Web.Hosting.HostingEnvironment.QueueBackgroun......
  • .Net core 利用Npoi.Mapper 生成Excel
    1.NuGet添加Npoi.Mapper引用   2.初始化privatevoidbutton1_Click(objectsender,EventArgse){//数据导出测试......
  • 【CV项目源码实现】Floating point exception (core dumped)
    前言cmd./darknetdetectordemocfg/tfl.datacfg/yolov3-tiny-tfl.cfgbackup/yolov3-tiny-tfl_500000.weightsdata/tfl.avierrorFloatingpointexception(cor......
  • KASP标记与农作物育种
    目录KASP的特点KASP的原理与步骤原理步骤(1)引物和探针设计(2)普通PCR扩增(3)荧光检测和分析KASP与农业育种KASP的特点在过去30年中,分子标记从低通量限制性片段长度多态性(RFLP......
  • AI Engine core 初识
    AIEnginecore初识     其余的端口需要通过软件平台来使能  ......
  • ASP.NET Core依赖注入系统学习教程:5.生命周期
    在现实生活中,生命周期一词往往代表着某些人或事物从生到死的过程,而在依赖注入框架中,生命周期中的“生与死”体现为服务实例的创建和释放。实际上对于介绍依赖注入框架的生......
  • .net core 6.0 应用session
    一、在Strartup类的ConfigureServices方法中添加:services.AddDistributedMemoryCache(); //添加内存缓存services.AddSession(); //添加Session服务 二、在Strartu......