【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 的步骤如下:

  1. 打开您的应用程序的 Startup.cs 文件。

  2. ConfigureServices 方法中,添加 services.AddHttpContextAccessor()

public void ConfigureServices(IServiceCollection services)
{services.AddHttpContextAccessor();// 其他服务注册
}

现在,IHttpContextAccessor 已经被注册到应用程序的 DI 容器中,可以在其他组件中使用。

使用 IHttpContextAccessor 的步骤如下:

  1. 在要使用 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

  1. 在带有 DI 的情况下使用 IHttpContextAccessor
public void MyController(IHttpContextAccessor httpContextAccessor)
{HttpContext context = httpContextAccessor.HttpContext;// 使用 HttpContext 进行操作,例如获取请求信息或用户身份验证状态等
}

在控制器或其他类中,您可以通过方法参数直接使用 IHttpContextAccessor

通过使用 IHttpContextAccessor,您可以在应用程序的各个部分获取当前 HTTP 请求的上下文信息,例如请求头、查询参数、用户身份验证和授权信息等。请注意,您可能需要在 ASP.NET Core 应用程序中启用相关中间件和功能,以便在 IHttpContextAccessor 中获取到完整的上下文信息。

三、两者区别

DbContextIHttpContextAccessor 是在不同上下文中使用的两个不同的服务。

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 请求上下文的访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

案例系列:营销模型_客户细分_无监督聚类

案例系列&#xff1a;营销模型_客户细分_无监督聚类 import numpy as np # 线性代数库 import pandas as pd # 数据处理库&#xff0c;CSV文件的输入输出&#xff08;例如pd.read_csv&#xff09;/kaggle/input/customer-personality-analysis/marketing_campaign.csv在这个项…

KoPA: Making Large Language Models Perform Better in Knowledge Graph Completion

本来这个论文用来组会讲的&#xff0c;但是冲突了&#xff0c;没怎么讲&#xff0c;记录一下供以后学习。 创新点 按照我的理解简单概述一下这篇论文的创新点 提出使用大模型补全知识图谱&#xff0c;并且融合知识图谱的结构信息提出一个新的模型KoPA模型&#xff0c;采用少…

JavaCV音视频开发宝典:UDP局域网组播推流,多播推流,局域网多网段推流,使用UDP方式推送TS组播流,实现UDP一对多组播

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 ​ 前言 在之前文章中我们已经实现rtp点到点传输JavaCV音视频开发宝典:rtp点到点音视频传输(一对一音视频直播)和rtp广播JavaCV音视频开发宝典:rtp广播方式发送TS流音视频传输(一对多音视…

Linux宝塔面板本地部署Discuz论坛发布到公网访问【无需公网IP】

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…

uni-app学习记录

uni-app官网学习记录 uni-app注意点记录 页面跳转注意事项 navigateTo, redirectTo 只能打开非 tabBar 页面。switchTab 只能打开 tabBar 页面。reLaunch 可以打开任意页面。不能在首页 onReady 之前进行页面跳转。 页面通讯 // 发起页面uni.$emit(update,{msg:页面更新})//…

软件设计模式:六大设计原则

文章目录 前言一、开闭原则二、里氏替换原则三、依赖倒转原则四、接口隔离五、迪米特法则六、合成复用原则总结 前言 在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&am…

Postman调用HTTPS需要配置

1、配置—Settings 2、General—SSL cert…&#xff1a;改成OFF 3、添加请求IP 欢迎大家阅读&#xff0c;本人见识有限&#xff0c;写的博客难免有错误或者疏忽的地方&#xff0c;还望各位大佬指点&#xff0c;在此表示感谢。觉得本文章有帮助到的&#xff0c;点个赞呗

项目进度管理:掌握进度管理技巧,保障项目不延期

项目进度问题通常在小型团队中并不显著&#xff0c;因为这类团队通常人数较少&#xff0c;成员间的沟通成本相对较低。这使得他们在执行项目时更加团结和协作。 然而&#xff0c;当团队规模扩大到上百人时&#xff0c;这使得沟通变得更为复杂&#xff0c;在这个庞大的团队中&…

JAVA线上事故:递归导致的OOM

最近因为人员离职&#xff0c;接手一个项目&#xff0c;是xxljob的客户端&#xff0c;部署在k8s上&#xff0c;在排查线上工单时&#xff0c;发现了一个问题&#xff1a; 在管理界面上&#xff0c;我惊讶的发现&#xff0c;三个月的时间&#xff0c;2个Pod&#xff0c;每个都重…

debian10安装配置vim+gtags

sudo apt install global gtags --version gtags //生成gtag gtags-cscope //查看gtags gtags与leaderf配合使用 参考: 【VIM】【LeaderF】【Gtags】打造全定制化的IDE开发环境&#xff01; - 知乎

以ACM32F403为主控的车载电动尾门案例分析

方案概述 随着汽车行业智能化、电气化、网联化大潮的发展&#xff0c;电动后尾门逐渐普及化。此方案兼容多种人机交互接口&#xff0c;包括传统的按键开关&#xff0c;也包括智能脚踢传感器&#xff0c;远程手机控制等智能控制技术&#xff0c;支持防夹算法&#xff0c;支持全锁…

Apache+PHP环境配置 手动配置

准备工作&#xff0c;在G盘新建一个WAMP目录 1.获取Apache 打开下载地址Apache VS17 binaries and modules download&#xff0c;下载 httpd-2.4.58-win64-VS17.zip 将下载好的httpd-2.4.58-win64-VS17.zip拷贝到G:\WAMP目录下并解压到当前目录&#xff0c;得到Apache24目录 …

u盘加密软件合辑丨u盘怎么上锁某个文件夹

毫无疑问&#xff0c;U盘是我们生活中最常使用的移动储存设备&#xff0c;常见的U盘普遍没有使用限制&#xff0c;任何人都可以浏览其中的数据&#xff0c;这就可能导致数据泄密和隐私泄露&#xff0c;那么普通U盘怎么变成加密U盘呢&#xff1f; 一、上锁某个U盘文件夹 可以将…

Vue3+Echarts:堆积柱状图的绘制

一、需求 在Vue3项目中&#xff0c;想用Echarts来绘制堆积柱状图&#xff0c;去展示最近一周APP在不同渠道的登录人数效果如下&#xff1a; 二、实现 (关于Echarts的下载安装以及图表的样式设计&#xff0c;此处不展开&#xff01;) 1、Templates部分 <template>&l…

向本地maven中加载依赖

1、现在maven官网仓库找到相应依赖 Maven Repository: Search/Browse/Explore (mvnrepository.com) 2、下载相应jar包 3、使用maven命令在jar所在文件加内cmd运行 注意修改参数 -DgroupId&#xff1a;表示jar对应的groupId <groupId>io.confluent</groupId>…

菜鸟进阶数据大牛:如何系统学习BI商业智能

在这个信息爆炸式增长的时代&#xff0c;挖掘数据的潜在价值尤为重要&#xff0c;越来越多的人将目光聚集于商务智能BI领域。通过数据分析软件对来自不同的数据源进行统一的处理和管理&#xff0c;并以灵活的方式展示数据之间的联系&#xff0c;辅助企业进行决策。 在BI越发重…

MATLAB - 最优控制(Optimal Control)

系列文章目录 前言 - 什么是最优控制&#xff1f; 最优控制是动态系统满足设计目标的条件。最优控制是通过执行以下定义的最优性标准的控制律来实现的。一些广泛使用的最优控制方法有&#xff1a; 线性二次调节器 (LQR)/线性二次高斯 (LQG) 控制 模型预测控制 强化学习 极值…

HBase基础知识(一):HBase简介、HBase数据模型与基本架构

第1章HBase简介 1.1HBase定义 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。 1.2HBase数据模型 逻辑上&#xff0c;HBase的数据模型同关系型数据库很类似&#xff0c;数据存储在一张表中&#xff0c;有行有列。但从HBase的底层物理存储结构&#xff08;K-V&a…

【Spring教程31】SSM框架整合实战:从零开始学习SSM整合配置,如何编写Mybatis SpringMVC JDBC Spring配置类

目录 1 流程分析2 整合配置2.1 步骤1&#xff1a;创建Maven的web项目2.2 步骤2:添加依赖2.3 步骤3:创建项目包结构2.4 步骤4:创建SpringConfig配置类2.5 步骤5:创建JdbcConfig配置类2.6 步骤6:创建MybatisConfig配置类2.7 步骤7:创建jdbc.properties2.8 步骤8:创建SpringMVC配置…

【MyBatis Plus】Service Mapper内置接口讲解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《MyBatis-Plus》。&#x1f3af;&#x1f3af; &am…