首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将DbContext注入LoggerProvider会在.NET内核中抛出StackOverflowException

在.NET开发中,DbContext是Entity Framework Core中的一个重要组件,用于管理应用程序与数据库之间的交互。LoggerProvider是一个用于记录日志的提供程序。在某些情况下,将DbContext注入LoggerProvider可能会导致StackOverflowException异常。

StackOverflowException是一种表示堆栈溢出的异常,当一个方法递归调用自身或其他方法时,如果调用栈超过了系统定义的最大深度,就会抛出这个异常。在这种情况下,可能是由于循环依赖或无限递归导致的。

为了避免这个问题,可以考虑以下解决方案:

  1. 避免将DbContext注入LoggerProvider:在设计应用程序架构时,需要注意避免将DbContext注入LoggerProvider,以防止潜在的循环依赖或递归调用。
  2. 使用合适的日志记录方式:可以考虑使用其他日志记录方式,如ILogger接口的实现类,或者第三方的日志记录库,如Serilog、NLog等。这些库提供了更灵活和可配置的日志记录功能,可以避免潜在的循环依赖问题。
  3. 检查代码逻辑:如果确实需要将DbContext注入LoggerProvider,需要仔细检查代码逻辑,确保没有出现循环依赖或递归调用的情况。可以使用调试工具或日志记录来帮助定位问题所在。

总结起来,将DbContext注入LoggerProvider可能会导致StackOverflowException异常。为了避免这个问题,可以避免将DbContext注入LoggerProvider,使用其他日志记录方式,或者仔细检查代码逻辑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET Core的日志:采用统一的模式记录日志

NET Core提供了独立的日志模型使我们可以采用统一的API来完成针对日志记录的编程,我们同时也可以利用其扩展点对这个模型进行定制,比如可以将上述这些成熟的日志框架整合到我们的应用。...目录 一、日志模型三要素 二、日志写入不同的目的地 三、采用依赖注入编程模式创建Logger 四、根据等级过滤日志消息 一、日志模型三要素 日志记录编程主要会涉及到三个核心对象,它们分别是Logger...、LoggerFactory和LoggerProvider,这三个对象同时也是.NET Core日志模型的核心对象,并通过相应的接口(ILogger、ILoggerFactory和ILoggerProvider...Logger 在我们演示的实例,我们直接调用构造函数创建了一个LoggerFactory并利用它来创建用于记录日志的Logger,但是在一个ASP.NET Core应用,我们总是依赖注入的方式来获取这个...所以我们的程序执行之后会在控制台上打印出如下图所示的日志消息。 ?

99860

学完这篇依赖注入,与面试官扯皮就没有问题了。

在webapp:scoped service 会在请求结束时被销毁; 在EFCore:使用AddDbContext默认注册的是特定范围的DbContext,这意味在我们可以在一次sql连接内,使用同一个...DbContext实例进行多次DB操作。...(注册)提供一种方式各种部件与他们依赖的服务绑定到一起; // Add...函数或containerBuilder.Register函数 ③....当我尝试从github源码探究[依赖注入产生对象]的伪代码时,文件/代码众多,迷路了! ? 实际上,我们可以在依赖树的尾部对象的构造函数手动抛出异常,异常的调用栈就是一个天然的源码导航。...临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障 手撕公司SSO登录原理 实战解读ASP.NET Core身份认证 ASP.NET Core应用注意这一点,CTO会对你刮目相看

1.2K31

【半译】在ASP.NET Core创建内部使用作用域服务的Quartz.NET宿主服务

在我的上一篇文章,我展示了如何使用ASP.NET Core创建Quartz.NET托管服务并使用它来按计划运行后台任务。...不幸的是,由于Quartz.NET API的工作方式,在Quartz作业中使用Scoped依赖项注入服务有些麻烦。说明下这篇文章部分采用机翻。...权宜之计 我在上一篇文章展示的解决方案是IServiceProvider注入到您的IJob的文档,手动创建一个范围,并从中检索必要的服务。...主要有以下两个主要优点: 我们可以EmailReminderJob注册为范围服务,并直接任何依赖项注入其构造函数 我们可以将其他横切关注点转移到QuartzJobRunner类。...当作业成功执行后(即未抛出异常),我们所有未提交的更改保存在DbContext,并在消息总线上调度事件。

1.8K10

.NET Core下的日志(1):记录日志信息

目录 一、日志模型三要素 二、日志写入不同的目的地 三、依赖注入 四、根据等级过滤日志消息 五、利用TraceSource记录日志     直接利用TraceSource记录追踪日志     利用TraceSourceLoggerProvider...日志记录编程主要会涉及到三个核心对象,它们分别是Logger、LoggerFactory和LoggerProvider,这三个对象同时也是.NET Core日志模型的核心对象,并通过相应的接口(ILogger...具体来说,在通过LoggerFactory创建Logger之前,我们会根据需求一个或者多个LoggerProvider注册到LoggerFactory之上。...在我们演示的实例,我们直接调用构造函数创建了一个LoggerFactory并利用它来创建用于记录日志的Logger,在一个.NET Core应用,LoggerFactory会以依赖注入的方式注册到...在.NET Framework 2.0种,增强的追踪日志功能实现在新引入的TraceSource类型,并成为我们的首选。.

1.1K70

ASP.NET Core 依赖注入(DI)简介

ASP.NET Core应用程序可以通过将其注入到Startup类的方法来利用内置的框架服务,并且应用程序服务也可以配置为注入。...以这种方式,可以复杂的依赖关系图提供给类,而不需要任何硬编码的对象构造。 除了创建具有依赖关系的对象之外,容器通常会在应用程序管理对象生命周期。...ASP.NET的容器是指它作为服务管理的类型。 在本文的其余部分,服务引用由ASP.NET Core的IoC容器管理的类型。...关于数据访问,您可以DbContext注入到控制器(假设您已将EF添加到ConfigureServices的服务容器)。...一些开发人员更喜欢使用数据库的仓储接口,而不是直接注入DbContext。 使用接口数据访问逻辑封装在一个位置可以最小化数据库更改时您将需要更改的位置。

3K40

从EFCore上下文的使用到深入剖析DI的生命周期最后实现自动属性注入

使用EF的话不可避免要和DbContext打交道,在Core的常规用法一般是:创建一个XXXContext类继承自DbContext,实现一个拥有DbContextOptions参数的构造器,在启动类...StartUp的ConfigureServices方法里调用IServiceCollection的扩展方法AddDbContext,把上下文注入到DI容器,然后在使用的地方通过构造函数的参数获取实例...我们可以去掉有参构造函数,然后重写DbContext的OnConfiguring方法,在这个方法做数据库配置: protected override void OnConfiguring...在Asp.Net Core,内置的DI有3种服务模式,分别是Singleton、Transient、Scoped,Singleton服务实例是保存在root provider的,所以它才能做到全局单例...我的思路大概是:创建一个自定义标签(Attribute),用来给需要注入的属性打标签,然后写一个服务激活类,用来解析给定实例需要注入的属性并赋值,在某个类型被创建实例的时候也就是构造函数调用这个激活方法实现属性注入

1.2K20

CAP带你轻松玩转Asp.Net Core消息队列

CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community的第一个千星项目(目前已经1656 Star),具有轻量级、易使用、高性能等特点。 ?...因为我采用的是EF Core,所以首先要创建一个DbContext上下文,代码如下: public class CapDbContext:DbContext { public...,对应的操作和功能解释如下: public void ConfigureServices(IServiceCollection services) { //注入DbContext...消息的失败重试 在订阅方法,如果抛出异常,那么CAP就会认为该条消息处理失败,会自动进行重试,重试次数在前方已经进行了配置。...感谢晓东开发出如此强大的项目,同时感谢.Net Core Community。

1.1K20

CAP带你轻松玩转Asp.Net Core消息队列

CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community的第一个千星项目(目前已经1656 Star),具有轻量级、易使用、高性能等特点。...因为我采用的是EF Core,所以首先要创建一个DbContext上下文,代码如下: public class CapDbContext:DbContext { public...,对应的操作和功能解释如下: public void ConfigureServices(IServiceCollection services) { //注入DbContext...消息的失败重试 在订阅方法,如果抛出异常,那么CAP就会认为该条消息处理失败,会自动进行重试,重试次数在前方已经进行了配置。...感谢晓东开发出如此强大的项目,同时感谢.Net Core Community。

2.4K10

.NET Core下的日志(2):日志模型详解

NET Core的日志模型主要由三个核心对象构成,它们分别是Logger、LoggerProvider和LoggerFactory。...我们通过调用AddProvider方法某个LoggerProvider对象注册到LoggerFactory之上,CreateLogger方法创建的Logger需要利用这些注册的LoggerProvider...一旦新的LoggerProvider注册到LoggerFactory之上,LoggerFactory正是调用这个方法新注册的LoggerProvider应用到由它创建的Logger对象之上。...对于用于注册LoggerProvider的AddProvider方法来说,LoggerFactory除了指定的LoggerProvider添加到LoggerProviders属性表示的列表之中,它还会调用每个已经创建的...依赖注入 在一个真正的.NET Core应用,框架内部会借助ServiceProvider以依赖注入的形式向我们提供用于创建Logger对象的LoggerFactory。

986100

浅谈 EF CORE 迁移和实例化的几种方式

Level Up 2.1 准备工作 第一步生成的数据库,迁移文件和使用方式内容全部删除。...写过 ASP.NET CORE 的人可能知道在 ASP.NET CORE ,Context 常常以依赖注入的方式引入到我们的 Web 层,Service 层,或者 XXCore 层(话说笔者最近最喜欢的解决方案开发架构就是伪...其实在 Console 应用,这也可以很容易实现,具体的依赖注入引入可以参考笔者的上一篇博客,所以最终的代码效果如下: var serviceCollection = new ServiceCollection...其实通过这样一步步下来,我们可以发现一些项目功能上的亮点,比如既然可以自配置 DbContext 的 Option 选项,同时我们也知道了如何在类库和 Console 项目中添加依赖注入以及 Configuration...而这部分内容笔者也将会在之后的博文中给出。

1.1K50

浅谈 EF CORE 迁移和实例化的几种方式

Level Up 2.1 准备工作 第一步生成的数据库,迁移文件和使用方式内容全部删除。...写过 ASP.NET CORE 的人可能知道在 ASP.NET CORE ,Context 常常以依赖注入的方式引入到我们的 Web 层,Service 层,或者 XXCore 层(话说笔者最近最喜欢的解决方案开发架构就是伪...其实在 Console 应用,这也可以很容易实现,具体的依赖注入引入可以参考笔者的上一篇博客,所以最终的代码效果如下: var serviceCollection = new ServiceCollection...其实通过这样一步步下来,我们可以发现一些项目功能上的亮点,比如既然可以自配置 DbContext 的 Option 选项,同时我们也知道了如何在类库和 Console 项目中添加依赖注入以及 Configuration...而这部分内容笔者也将会在之后的博文中给出。 我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan

83730

熟悉而陌生的新朋友——IAsyncDisposable

但是在开发过程,有时候我们需要涉及到非托管的资源,比如I/O操作,缓冲区的文本内容保存到文件、网络通讯,发送数据包等等。 由于这些操作GC没有办法控制,所以也就没有办法来管理它们的生命周期。...当CLR需要调用终结方法时,它必须把回收对象内存的工作推迟到垃圾收集的下一轮(终结方法会在两轮垃圾收集之间运行)。这意味着对象的内存会在很长一段时间内得不到释放。...比如: Utf8JsonWriter、StreamWriter这些与文件操作有关的类; DbContext这类数据库操作类 Timer 依赖注入的ServiceProvider ……………… 接下来的....Asp Net Core 依赖注入的IAsyncDisposable 对于咱们使用AspNet Core的开发人员来说,我们在大多数情况下都会依赖于框架所提供的依赖注入功能。...而依赖注入框架,会在作用域释放的时候,自动去调用所注入服务的释放接口IDisposable。 比如我们把 DbContext 注入之后,其实就只管使用就行了,从来不会关心它的Dispose问题。

72010

Asp.Net Core 轻松学-使用MariaDBMySqlPostgreSQL和支持多个上下文对象

前言 在上一篇文章(Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库)[https://www.cnblogs.com/viter/p/10243577.html],介绍了...EFCore 连接 MSSQL 的使用方法,在本章继续介绍如何利用 EFCore 连接到 MariaDB/MySql 和 PostgreSQL 数据库,同时,在一个项目中,如何添加多个数据库上下文对象...创建 Migrations 对象 在包管理器控制台输入以下命令,创建 Migrations 对象 Add-Migration MySql.Forum.v1 继续在包管理器控制台中输入以下命令,该命令将会在数据库创建实体业务对象...Migrations 的时候, EF 会自动查找匹配的 Context ,但是,由于使用了多个 Context,在执行命令时,必须指定 -Context NpgSqlForumContext,否则,抛出...,和其它类型的注入使用方式没有区别,就是简单的在 HomeController 的构造函数声明这两个 Context 对象即可 3.2 使用两个上下文对象进行 CURD 操作 下面演示使用 MySqlForumContext

2.3K51

零基础写框架(3): Serilog.NET 的日志使用技巧

.NET 的日志使用技巧 Serilog Serilog 是 .NET 社区中使用最广泛的日志框架,所以笔者使用一个小节单独讲解使用方法。 示例项目在 Demo2.Console 。...新建一个 ASP.NET Core API 新项目,引入 Serilog.AspNetCore 包。 在 Program 添加代码注入 Serilog 。...如果需要打印 http 的请求和响应日志,我们可以使用 ASP.NET Core 自带的 HttpLoggingMiddleware 中间件。 首先注入请求日志拦截服务。...可以通过在中间件获取 Token 的用户信息,然后注入到日志上下文中,这样打印出来的日志,会携带用户信息。...CZGL.AOP 可以通过 .NET Core 自带的依赖注入框架和 Autofac 结合使用,自动代理 CI 容器的服务。

20510

ASP.NET Core应用基本编程模式:依赖注入

二、服务的消费 ASP.NET Core框架的很多核心对象都是通过依赖注入方式提供的,如用来对应用进行初始化的Startup对象、中间件对象,以及ASP.NET Core MVC应用的Controller...由于ASP.NET Core在创建中间件对象并利用它们构建整个请求处理管道时,所有的服务都已经注册完毕,所以注册的任何一个服务都可以注入中间件类型的构造函数。...在一个ASP.NET Core应用,如果服务的生命周期注册为Scoped模式,那么我们希望服务实例真正采用基于请求的生命周期模式。...Core能否利用Cat框架来提供所需的服务,我们注册的3个服务直接注入Startup类型的Configure方法。...我们在该方法利用注册的中间件这3个注入的服务实例的类型写入相应的HTML文档。如果利用浏览器访问该应用,得到的输出结果如下图所示。 ?

1K40

UnitOfWork知多少

UOW的本质 通过以上的介绍,我们可以总结出实现UOW的几个要点: UOW跟踪变化 UOW维护了一个变更列表 UOW跟踪到的已变更的对象保存到变更列表 UOW借助事务一次性提交变更列表的所有更改...UOW处理并发 而对于这些要点,EFDBContext已经实现了。...EF的UOW 每个DbContext类型实例都有一个ChangeTracker用来跟踪记录实体的变化。当调用SaveChanges时,所有的更改通过事务一次性提交到数据库。...(); } } } 既然Uow接手保存操作,自然我们需要:注释掉EfCoreRepositoryInsert、Update、Delete方法的显式保存调用_dbContext.SaveChanges...这个时候我们就可以借助依赖注入。 4.6. 依赖注入 我们直接使用.net core 提供的依赖注入,依次注入DbContext、UnitOfWork和Repository。

2.3K81
领券