首页 > 其他分享 >.Net Core后端架构实战【3-介入IOC控制反转】

.Net Core后端架构实战【3-介入IOC控制反转】

时间:2023-06-04 18:24:28浏览次数:42  
标签:Core service type 实例 ServiceDescriptor new Net IOC public

摘要:基于.NET Core 7.0WebApi后端架构实战【2-介入IOC控制反转】  2023/04/09, ASP.NET Core 7.0, VS2022

引言

    Inversion of Control,简称IOC,即控制反转。记得当初刚实习的时候公司的带我的人和我提到过IOC这个概念,当初完全不知道是
啥东西。后来有幸写了半年Java,SpringBoot里面业务开发随处可见IOC。再后来我写.Net Core用到的第一个框架Blog.Core项目,它里
面IRepository与Repository和IServices与Services,这种解耦的程度单说它贯彻依赖倒置原则是非常nice的!.NetCore时代更加注
重面向接口编程,并且它内置轻量型的IOC容器可帮助我们灵活的进行开发。

依赖注入

Dependency Injection,何为依赖注入?由容器动态的将对象依赖的资源注入到对象之中。假设容器在构造对象A时,对象A的构造依赖对象B、对象C、对象D这些参数,容器会将这些依赖关系自动构造好,最大限度的完成程序的解耦。依赖注入(Dependency Injection,简称DI)就是构造A对象时,需要依赖B对象,那么就先构造B对象作为参数传递到A对象,这种对象初始化并注入的技术就叫做依赖注入。

.NetCore本身就集成了一个轻量型的IOC容器,我们可以把程序中的抽象(Interface)或业务类根据需要的生命周期配置到容器中。他不是一次把所有的实例都构造出来,当你在用的时候他才会去构造实例!.NetCore内置的IOC容器只支持构造函数注入!

如下三种生命周期的注入:

Singleton:在第一次被请求的时候被创建,对象的构造函数只会执行一次然后一直会存在内存中之后就一直使用这一个实例。如果在多线程中使用了Singleton,要考虑线程安全的问题,保证它不会有冲突。

Scoped:一个请求只创建这一个实例,请求会被当成一个范围,也就是说单个请求对象的构造函数只会执行一次,同一次请求内注入多次也用的是同一个对象。假如一个请求会穿透应用层、领域层、基础设施层等等各层,在穿层的过程中肯定会有同一个类的多次注入,那这些多次注入在这个作用域下维持的就是单例。例如工作单元模式就可以借助这种模式的生命周期来实现,像EF Core的DbContext上下文就被注册为作用域服务。

Transient:每次请求时都会创建一个新的实例,只要注入一次,构造函数就会执行一次即实例化一次。Scoped、Transient的区别是你在同一个上下文中是否期望使用同一个实例,如果是,用Scoped,反之则使用Transient。

标签:Core,service,type,实例,ServiceDescriptor,new,Net,IOC,public
From: https://www.cnblogs.com/zhangnever/p/17300230.html

相关文章

  • ASP.NET Core 全局异常处理
    IAsyncExceptionFilter在ASP.NETCore中,可以使用异常过滤器(ExceptionFilter)来捕获和处理应用程序中的异常。IExceptionFilter接口和IAsyncExceptionFilter接口都可以用来实现自定义的异常过滤器。不过我更建议您考虑它的异步版本:IAsyncExceptionFilter。publicclassCust......
  • 基于Admin.NET框架的前端的一些改进和代码生成处理(2)
    在上篇随笔《基于Admin.NET框架的前端的一些改进和代码生成处理(1)》中大致介绍了一些关于对Admin.NET框架的前端的改造工作,主要目的就是希望能够增加前端代码的简洁性和可读性,以及利用代码生成工具来快速生成相关的代码,从而减少开发过程中的繁琐问题。本篇随笔继续探讨一下,对其中一......
  • 基于Admin.NET框架的前端的一些改进和代码生成处理(1)
    Admin.NET是一套基于Furion/.NET6实现的通用管理平台,模块插件式开发,框架包含了常规的权限管理、字典等管理模块,以及一些Vue3的Demo案例,框架前后端分离。后端基于基于Furion/.NET6实现,底层集成SqlSugar;前端则是采用Vue-Next-Admin的前端框架,整体是一套非常不错的框架。本人比较喜......
  • ubuntu上产生coredump
    之前按书里的教程老是整不出coredump,都快把我整郁闷了。在千辛万苦之下才找到一篇博客适用于这种情况。记录一下。 一般情况下:设置coredump文件的最大值:输入命令:$ulimit-cunlimited 在/proc/sys/kernel/core_pattern中设置格式化的core文件保存位置或者文件名在相对路......
  • 02_容器编排技术 Kubernetes
    云原生容器编排技术Kubernetes面试题1、简述etcd及其特点?etcd是CoreOS团队发起的开源项目,是一个管理配置信息和服务发现(servicediscovery)的项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于Go语言实现。特点:简单:支持REST风格的HTTP+JSONAPI安全:支持......
  • .net 温故知新【11】:Asp.Net Core WebAPI 入门使用及介绍
    在Asp.NetCore上面由于现在前后端分离已经是趋势,所以asp.netcoreMVC用的没有那么多,主要以WebApi作为学习目标。一、创建一个WebApi项目我使用的是VS2022,.Net7版本。在创建界面有几项配置:配置Https启用Docker使用控制器启用OpenAPI支持不使用顶级语句其中配置Ht......
  • NetHunter使用Rucky实现HID键盘数据模拟攻击
    知识概要:NetHunter:是KaliLinux推出的移动Android端的系统Rucky:是一种基于HID设备的攻击工具,其本质是一个可编程的键盘模拟器,可以用于快速执行各种攻击,例如在目标计算机上执行特定的命令、窃取密码等。HID:是指人体接口设备,常见的HID包括键盘、鼠标、摄像头等USB设备......
  • kubernetes部署nexus
    1.NexusVolumecat>nexus-volume.yaml<<EOF---apiVersion:v1kind:PersistentVolumeClaimmetadata:name:nexus-data-pvcnamespace:kube-opsspec:accessModes:-ReadWriteMany#指定storageClass的名字,这里使用默认的standardstorageClassName......
  • kubernetes 部署SonarQube
    1.PostgreSQL参考博客:https://hanggi.me/post/kubernetes/k8s-postgresql1.1.配置PostgreSQL的ConfigMapcat>postgres-configmap.yaml<<EOFapiVersion:v1kind:ConfigMapmetadata:name:postgres-confignamespace:kube-opslabels:app:postgresd......
  • .Net6添加Area域
      添加完成之后你的项目将会多出一个Area文件,同时vs会自动打开ScaffoldingReadMe.txt文件,把红框框内的内容复制到启动文件(ProGram.cs)中最后需要在你用到的视图或者控制器上加上Area标注 ......