【C#】.net core 6.0 通过依赖注入注册和使用上下文服务

给自己一个目标,然后坚持一段时间,总会有收获和感悟!
请求上下文是指在 Web 应用程序中处理请求时,包含有关当前请求的各种信息的对象。这些信息包括请求的头部、身体、查询字符串、路由数据、用户身份验证信息以及其他与请求相关的数据。
目录
- 一、DbContext
- 1.1、创建自定义类
- 1.2、注册服务
- 1.3、引用
- 二、HttpContextAccessor
- 2.1、Web 应用程序
- 2.2、控制台应用程序
- 2.3、依赖注入和使用
- 三、两者区别
一、DbContext
DbContext 是 Entity Framework (EF) 中的一个关键组件,用于在应用程序和数据库之间进行交互。它是一个上下文类,继承自 DbContext,用于定义数据库模型和执行数据库操作。通过 DbContext,您可以执行查询、插入、更新和删除等数据库操作。DbContext 主要关注数据持久化和数据访问。
在 .NET Core 6.0 中,您可以通过依赖注入 (DI) 来注册和使用上下文服务。
以下是一些常见的步骤:
1.1、创建自定义类
首先,在您的应用程序中创建一个上下文类。这个类通常是从 DbContext 类继承而来,用于定义您的数据库模型和执行数据库操作。
public class MyDbContext : DbContext
{public MyDbContext(DbContextOptions<MyDbContext> options) : base(options){}public DbSet<SomeEntity> SomeEntities { get; set; }// 其他模型和数据库操作
}
1.2、注册服务
接下来,在您的应用程序的 Startup.cs 文件中,注册您的上下文服务。在 ConfigureServices 方法中使用 AddDbContext 方法来添加上下文服务并指定连接字符串和其他选项。
public void ConfigureServices(IServiceCollection services)
{services.AddDbContext<MyDbContext>(options =>options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));// 其他服务注册
}
请确保在 appsettings.json 文件中配置了数据库连接字符串,并将其与注册的名称(DefaultConnection)对应。
1.3、引用
现在,您可以在您的应用程序的其他组件(如控制器或服务)中使用上下文服务。只需将 MyDbContext 类注入为依赖项即可。
public class MyService
{private readonly MyDbContext _dbContext;public MyService(MyDbContext dbContext){_dbContext = dbContext;}public void DoSomething(){// 使用上下文执行数据库操作}
}
在上面的示例中,MyService 类依赖于 MyDbContext,通过构造函数注入该依赖项。
这样,在整个应用程序中,您都可以使用上下文服务来执行数据库操作,通过依赖注入的方式访问您的上下文对象。
请注意,上述代码片段为常见的用例提供了示例,但实际的实现可能会因您的应用程序需求而不同。
二、HttpContextAccessor
在 .NET Core 6.0 中,获取上下文的方式取决于您使用的技术栈和具体的应用程序类型。
以下是几种常见的方法:
2.1、Web 应用程序
ASP.NET Core Web 应用程序:如果您正在开发一个 ASP.NET Core Web 应用程序,您可以通过依赖注入来获取当前的 HTTP 上下文。您可以使用 HttpContextAccessor 类来访问当前的 HTTP 上下文对象。在您的控制器、中间件或服务中注入 IHttpContextAccessor,然后使用它来访问当前的上下文。
public class MyController : Controller
{private readonly IHttpContextAccessor _httpContextAccessor;public MyController(IHttpContextAccessor httpContextAccessor){_httpContextAccessor = httpContextAccessor;}public IActionResult MyAction(){HttpContext context = _httpContextAccessor.HttpContext;// 使用上下文对象进行操作return View();}
}
2.2、控制台应用程序
如果您正在开发一个控制台应用程序,您可以使用 CallContext 类来存储和检索上下文信息。CallContext 类提供了一个字典,您可以将相关上下文信息存储在其中。
public static class MyContext
{private static readonly string Key = "MyContextKey";public static string Current{get => (string)CallContext.LogicalGetData(Key);set => CallContext.LogicalSetData(Key, value);}
}
在您的应用程序中,可以设置和获取上下文信息:
MyContext.Current = "MyContextValue";
string currentContext = MyContext.Current;
这样,在应用程序的不同位置,您都可以获取和设置相同的上下文信息。
请注意,上述方法为常见的用例提供了示例,但具体的实现可能会根据您的应用程序的需求而有所不同。
2.3、依赖注入和使用
在 .NET Core 6.0 中,您可以使用依赖注入 (DI) 来注册和使用 IHttpContextAccessor。
注册 IHttpContextAccessor 的步骤如下:
-
打开您的应用程序的
Startup.cs文件。 -
在
ConfigureServices方法中,添加services.AddHttpContextAccessor()。
public void ConfigureServices(IServiceCollection services)
{services.AddHttpContextAccessor();// 其他服务注册
}
现在,IHttpContextAccessor 已经被注册到应用程序的 DI 容器中,可以在其他组件中使用。
使用 IHttpContextAccessor 的步骤如下:
- 在要使用
IHttpContextAccessor的类中,将其注入为依赖项。
public class MyService
{private readonly IHttpContextAccessor _httpContextAccessor;public MyService(IHttpContextAccessor httpContextAccessor){_httpContextAccessor = httpContextAccessor;}public void DoSomething(){HttpContext context = _httpContextAccessor.HttpContext;// 使用 HttpContext 进行操作,例如获取请求信息或用户身份验证状态等}
}
在上面的示例中,我们通过构造函数将 IHttpContextAccessor 注入到 MyService 类中,并将其赋值给私有字段 _httpContextAccessor。
- 在带有 DI 的情况下使用
IHttpContextAccessor。
public void MyController(IHttpContextAccessor httpContextAccessor)
{HttpContext context = httpContextAccessor.HttpContext;// 使用 HttpContext 进行操作,例如获取请求信息或用户身份验证状态等
}
在控制器或其他类中,您可以通过方法参数直接使用 IHttpContextAccessor。
通过使用 IHttpContextAccessor,您可以在应用程序的各个部分获取当前 HTTP 请求的上下文信息,例如请求头、查询参数、用户身份验证和授权信息等。请注意,您可能需要在 ASP.NET Core 应用程序中启用相关中间件和功能,以便在 IHttpContextAccessor 中获取到完整的上下文信息。
三、两者区别
DbContext 和 IHttpContextAccessor 是在不同上下文中使用的两个不同的服务。
1)DbContext 是 Entity Framework (EF) 中的一个关键组件,用于在应用程序和数据库之间进行交互。它是一个上下文类,继承自 DbContext,用于定义数据库模型和执行数据库操作。通过 DbContext,您可以执行查询、插入、更新和删除等数据库操作。DbContext 主要关注数据持久化和数据访问。
2)IHttpContextAccessor 是 ASP.NET Core 中的一个服务,用于访问当前 HTTP 请求的上下文信息。它提供了访问请求头、查询参数、用户身份验证和授权信息等的能力。通过 IHttpContextAccessor,您可以在整个应用程序中访问当前 HTTP 请求的上下文信息。 IHttpContextAccessor 主要与 Web 请求处理相关联。
总结起来,
DbContext是与数据库交互的组件,而IHttpContextAccessor是与处理 Web 请求相关的组件。它们的用途和职责不同,但它们在 ASP.NET Core 应用程序中可以一起使用,以实现与数据库的交互和对 Web 请求上下文的访问。
相关文章:
【C#】.net core 6.0 通过依赖注入注册和使用上下文服务
给自己一个目标,然后坚持一段时间,总会有收获和感悟! 请求上下文是指在 Web 应用程序中处理请求时,包含有关当前请求的各种信息的对象。这些信息包括请求的头部、身体、查询字符串、路由数据、用户身份验证信息以及其他与请求相关…...
关于redis单线程和IO多路复用的理解
首先,Redis是一个高性能的分布式缓存中间件。其复杂性不言而喻,对于Redis整体而言肯定不是只有一个线程。 我们常说的Redis 是单线程,主要是指 Redis 在网络 IO和键值对读写是采用一个线程来完成的,这也是 Redis 对外提供键值存储…...
第四十一章 XML 映射参数摘要
文章目录 第四十一章 XML 映射参数摘要 第四十一章 XML 映射参数摘要 TopicParameters启用 XML 映射。XMLENABLED 类参数将属性映射到元素或属性。XMLPROJECTION property parameter ("NONE", "ATTRIBUTE", "XMLATTRIBUTE", "CONTENT"…...
redis之五种基本数据类型
一) 字符串(String) 1 使用场景 2 编码 3 编码转换 二) List(列表) 1 使用场景 2 编码 三) Set(无序集合) 1 使用场景 2 编码 3 编码转换 四) ZSet(有序集合) 1 使用场景 2 编码 3 编码转换 五) Hash 1 使用场景 2 编码 3 编码转换 五种基本数据类型 redis…...
RocketMQ系统性学习-RocketMQ高级特性之消息大量堆积处理、部署架构和高可用机制
🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁dz…...
Angular 进阶之五: Signals到底用不用?
Angular 在V16的时候推出了Signals,在17正式作为主打功能之一强烈推荐,看过了各种博主的各种科普文章也没说明白,到底这东西值不值得用?毕竟项目大了,重构代码也不是闹着玩儿的。各种科普文章主要在说两点:…...
构建数字化金融生态系统:云原生的创新方法
内容来自演讲:曾祥龙 | DaoCloud | 解决方案架构师 摘要 本文探讨了金融企业在实施云原生体系时面临的挑战,包括复杂性、安全、数据持久化、服务网格使用和高可用容灾架构等。针对网络管理复杂性,文章提出了Spiderpool开源项目,…...
前端性能优化五:css和js位置
1. 精简HTML代码: ①. css链接文件尽量放在页面头部:a. css的加载不会阻塞DOM Tree的解析.b. 但会阻塞DOM Tree渲染,也会阻塞后面JS的执行.c. 将css放在任何body元素之前:(1). 可以确保在文档中解析了所有css的样式包括内联样式和外联的.(2). 减少了浏览器必须重排文档的次数.…...
苏州耕耘无忧物联网:降本增效,设备维护管理数字化转型的引领者
随着科技的快速发展和工业4.0的推动,设备维护管理已经从传统的被动式、经验式维护,转向了更加积极主动、数据驱动的维护模式。在这个过程中,苏州耕耘无忧物联科技有限公司以其深厚的技术积累和丰富的管理经验,引领着设备维护管理数…...
15个热门的开源数据可视化项目
数据可视化(即 BI仪表盘)是图形表示的数据。它涉及产生将表示的数据之间的关系传达给图像查看者的图像。这种通信是通过在可视化过程中使用图形标记和数据值之间的系统映射来实现的。该映射建立了如何在视觉上表示数据值,确定图形标记的属性(例如大小或颜色)如何以及在多大程…...
【第七在线】数据分析与人工智能在商品计划中的应用
随着技术的不断进步,数据分析和人工智能(AI)已经成为了现代商品计划的关键组成部分。在服装行业,这两项技术正在帮助企业更好地理解市场需求、优化库存管理、提高生产效率和提供更好的客户体验。本文将深入探讨数据分析和人工智能…...
【圣诞】极安云科赠书活动第①期:CTF实战:从入门到提升
【圣诞】极安云科赠书活动第①期:CTF实战:从入门到提升 9787111724834 9787121376955 9787302556275 ISBN编号:9787111724834 书名:CTF实战:从入门到提升 定:99.00元 开本:184mm260ÿ…...
分布式搜索elasticsearch概念
什么是elasticsearch? elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容 目录 elasticsearch的场景 elasticsearch的发展 Lucene篇 Elasticsearch篇 elasticsearch的安装 elasticsearch的场景 elasticsear…...
Linux环境安装Hadoop
(1)下载Hadoop安装包并上传 下载Hadoop安装包到本地,并导入到Linux服务器的/opt/software路径下 (2)解压安装包 解压安装文件并放到/opt/module下面 [roothadoop100 ~]$ cd /opt/software [roothadoop100 software…...
swing快速入门(二十五)
注释很详细,直接上代码 新增内容 1.ImageIO.write读取并显示图片 2.ImageIO.writeImageIO.write读取并保存图片 package swing21_30;import javax.imageio.ImageIO; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent…...
智能优化算法应用:基于卷尾猴算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于卷尾猴算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于卷尾猴算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.卷尾猴算法4.实验参数设定5.算法结果6.参考文…...
前端传输formDate格式的数据,后端不能用@RequestBody接收
写了个接口,跟前端对接,前端说怎么一直415的报错 我寻思不对啊,我swagger都请求成功了,后来发现前端一直是以formdata格式提交的数据,这样我其实是可以不加RequestBody的; 知识点: RequestBody…...
【AivaAI】做音乐,无人能比它更专业
关于Aiva Aiva AIVA是音乐制作初创公司AIVA Technologies打造的一款人工智能产品。是人工智能领域头款获得国际认证的虚拟作曲家。 Aiva登录 可以选择Google登录,或者其他邮箱登录。 输入用户名,登录完成。 开始制作音乐 在主页选择“创建曲目…...
嵌入式开发网络配置——windows连热点,开发板和电脑网线直连
目录 电脑 WiFi 上网,开发板和电脑直连 使用场景 设置VMware虚拟机的网络配置 Ubuntu设置——版本18.04 编辑 windows设置 开发板设置 原因:虚拟机Linux移植可执行程序到开发板失败 最后发现虚拟机的Linuxping不通开发板 下面是我的解决方法 …...
基于Netty构建Websocket服务端
除了构建TCP和UDP服务器和客户端,Netty还可以用于构建WebSocket服务器。WebSocket是一种基于TCP协议的双向通信协议,可以在Web浏览器和Web服务器之间建立实时通信通道。下面是一个简单的示例,演示如何使用Netty构建一个WebSocket服务器。 项目…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
