首页 > 其他分享 >简单理解.net 依赖注入的三种方式

简单理解.net 依赖注入的三种方式

时间:2024-08-28 10:50:06浏览次数:10  
标签:5.0 Core 依赖 请求 三种 AddTransient net NET

简单理解.net 依赖注入的三种方式

 

前言 :.NET5.0 于2020年11月10日正式发布,它是3.1之后的 .NET Core 的下一个主要版本。微软将这个新版本命名为 .NET 5.0 而不是 .NET Core 4.0,其原因有两个:

          1、跳过了版本号4.x,以避免与 .NET Framework 4.x 混淆。

         2、从名称中删除了“ Core”,以强调这是.NET未来的主要实现。与 .NET Core 或 .NET Framework 相比,.NET 5.0 支持更多类型的应用程序和平台。

    ASP.NET Core 5.0 基于 .NET 5.0,但保留名称“ Core”以避免将其与 ASP.NET MVC 5 混淆。同样,Entity Framework Core 5.0保留名称“ Core”以避免将其与 Entity Framework5、Entity Framework6 混淆。

    微软称将来只会有一个.NET平台,使用它可以开发 Windows、Linux、macOS、iOS、Android、tvOS、watchOS和WebAssembly等平台的应用。.NET 5中引入了新的.NET API,运行时和语言功能。


众所周知,.net有自带的3种注入的方式,分别是AddScoped、AddSingleton、AddTransient,他们分别是请求内的,单例的,瞬时的作用,那么,究竟到底是什么意思呢,我这里做了一个简单的测试。
定义了如下测试类


然后首先测试一下AddScoped,要将第二个注释放开模拟同一个请求,然后我们每次请求Index,都会发现打印的是1,2,因为我请求了3次,所以会出现3次1,2



然后接着测试Singleton,同样将services.AddScoped<TestSvc>()改为  services.AddSingleton<TestSvc>(),因为是单例的,所以我们应该可以看到那个局部临时变量i已经不会自动释放了,会一直存在内存中并且累加,就类似变成了静态变量



最后测试AddTransient,改为  services.AddTransient<TestSvc>();每次请求都会从新实例,如下:



总结:
AddTransient:每次请求都会从new一个新对象;
Singleton:程序启动后对象就一直存在了,所以需要考虑线程安全问题
Scoped:在同一次请求内共用同一个对象,不同的请求不共用,也应该根据实际考虑线程安全问题

个人网站:http://www.ttblog.site/

标签:5.0,Core,依赖,请求,三种,AddTransient,net,NET
From: https://www.cnblogs.com/sexintercourse/p/18384148

相关文章

  • .net core下使用事件总线
    .netcore下使用事件总线        随着微服务的火热,DDD(领域驱动设计模式)思想风起云涌,冲击着整个软件生态系统。其中,事件总线那是必须知道的了,于是我便抱着一个学习DDD的心态搭建了一个博客网站,目前该网站正在建设阶段,后续会不断完善,这里我只是讲一下我里面所用到的......
  • 一起来学习.net core程序使用中介者模式:MediatR插件
    一起来学习.netcore程序使用中介者模式:MediatR插件     中介者模式是一种常见的设计模式,旨再降低程序的耦合性,因为传统的三层模式层层之间需要显示的调用,必须上层依赖下层,耦合性很高,为了解耦,将所有的指令单独放在一个位置处理,其他位置均通过这个位置来间接的调用,从......
  • 实用接地气的 .NET 微服务框架
    前言微服务架构已经成为搭建高效、可扩展系统的关键技术之一,然而,现有许多微服务框架往往过于复杂,使得我们普通开发者难以快速上手并体验到微服务带了的便利。为了解决这一问题,于是作者精心打造了一款最接地气的.NET微服务框架,帮助我们轻松构建和管理微服务应用。本框架不仅支......
  • 秃姐学AI系列之:残差网络 ResNet
    目录残差网络——ResNet残差块思想ResNet块细节ResNet架构总结代码实现残差块两种ResNet块的情况 ResNet模型QA由上图发现,只有当较复杂的函数类包含较小的函数类时,才能确保提高它们的性能。对于深度神经网络,如果我们能将新添加的层训练成恒等映射(identityfu......
  • yum依赖python2环境-"No module named urlgrabber"
    1.python3安装perl环境以及IPC/cmd.pm模块,由于环境中安装了pyhon2和python3导致模块引入冲突。makepython3时一直报错没有Module_tktinter,重新安装tk后python3还是import失败 2.检查发现python2可以引入,并且再进行安装模块时,使用的是python,而系统python指向python2 3.修改......
  • .NET与AI的碰撞:开启智能编程新纪元
    设想一下,你是一名.NET开发者,正为一个复杂的数据分析项目绞尽脑汁。突然,你的IDE仿佛有了生命,不仅能理解你的想法,还能自动生成大部分代码,甚至主动指出潜在的优化空间。这听起来像是科幻电影中的场景,但实际上,这种“魔法”正在成为现实!让我们一同探讨.NET世界正在经历的激动人心的变革......
  • 基于Ubuntu部署企业级kubernetes集群
    1.主机名配置由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为k8s-master01;其中2台为workoer节点,名称分别为:k8s-worker01及k8s-worker02master节点hostnamectlset-hostnamek8s-master01Worker01节点hostnamectlset-hostnamek8s-worker01Work......
  • 自建 NFS 服务器实现 Kubernetes 持久化存储
    1.简介在Kubernetes集群中,持久化存储是一个非常重要的组件。它允许我们保存需要长期保留的数据,即使Pod被删除或重新调度,这些数据也不会丢失。网络文件系统(NFS)是一种简单、可靠且广泛使用的存储解决方案。本文将详细介绍如何在CentOS7系统上搭建NFS服务器,并......
  • Kubernetes (K8s) 监控方案:Prometheus 实战指南
    1.引言在当今云原生时代,Kubernetes(K8s)已成为容器编排的标准解决方案。然而,随着K8s集群规模和复杂性的增加,有效的监控变得至关重要。本文将详细介绍如何使用Prometheus构建一个全面而强大的K8s监控系统,帮助您实时掌握集群状态,快速定位问题,并优化资源利用。2.监......
  • 驾驭ASP.NET MVC:C# Web开发的精粹
    标题:驾驭ASP.NETMVC:C#Web开发的精粹摘要ASP.NETMVC是微软提供的一个用于构建动态网站的服务器端框架,它遵循模型-视图-控制器(MVC)设计模式,以实现代码的高内聚低耦合。本文将深入探讨如何在C#中使用ASP.NETMVC框架进行Web应用程序开发,包括项目结构、路由、控制器、视图和......