【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…

算法训练营Day23(二叉树)

669. 修剪二叉搜索树 669. 修剪二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 这里本身不难&#xff0c;更多的是递归的技巧&#xff0c;在脑子里模拟一遍递归逻辑&#xff0c;记忆好模板就好了。 class Solution {public TreeNode trimBST(TreeNode root, int low, int…

uni-app学习记录

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

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

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

爬虫scrapy中间件的使用

爬虫scrapy中间件的使用 学习目标&#xff1a; 应用 scrapy中使用间件使用随机UA的方法应用 scrapy中使用代理ip的的方法应用 scrapy与selenium配合使用 1. scrapy中间件的分类和作用 1.1 scrapy中间件的分类 根据scrapy运行流程中所在位置不同分为&#xff1a; 下载中间件…

idea好用的十个插件分享,用后敲代码的速度提升好几倍,亲测有效

简介&#xff1a; 在日常的开发工作中&#xff0c;我发现了一些非常实用的 IntelliJ IDEA 插件&#xff0c;它们能够显著提升开发效率&#xff0c;让编码变得更加轻松愉快。今天&#xff0c;我想分享给大家我的个人推荐&#xff0c;希望对你的开发工作有所帮助&#xff01; L…

Postman调用HTTPS需要配置

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

P4316 绿豆蛙的归宿

题意&#xff1a;给出一个有向无环图&#xff0c;对于每个点&#xff0c;一共有k条出边&#xff0c;则选择每条边的概率相等&#xff0c;都为1/k&#xff0c;问从点1走到点n的期望路径长度 思路&#xff1a;有向无环图&#xff0c;考虑拓扑&#xff0c;本题不同于P6154 游走&a…

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

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

10 分钟了解 nextTick,并实现简易版的 nextTick

一、什么是 nextTick nextTick 是一个用于在 DOM 更新完成后执行回调函数的方法。在 Vue.js 或其他类似框架中&#xff0c;当我们修改了数据后&#xff0c;DOM 并不会立即更新&#xff0c;而是会进入一个队列中&#xff0c;然后在下一个 tick 执行更新。nextTick 提供了一种方式…

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

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

MacOS 终端显示 Git 分支的名称

前提&#xff1a;MacOS 默认终端是不显示 Git 分支的名称的&#xff0c;个人感觉难受&#xff0c;样式也不好看&#xff01;就找到了 oh-my-zsh 终端输入以下指令就OK了 sh -c "$(curl -fsSL https://gitee.com/shmhlsy/oh-my-zsh-install.sh/raw/master/install.sh)&qu…

(js)循环数组构建对象

(js)循环数组构建对象 数组 dataArr["企业","工序"]方法 //构建表头 dataArr.forEach((item) > {let obj {};obj {label: item,value: item,};this.headList.push(obj); });对象 this.headList [{label: "企业",value: "企业&quo…

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盘文件夹 可以将…