c# - 未使用依赖注入处理 DbContext
问题描述
以最简单的形式,我创建了一个新的 mvc 核心项目,并创建了一个类:
public class Test : IDisposable
{
public void Dispose()
{
}
}
注册它
services.AddScoped<Test>();
并在控制器的构造函数中使用它
public HomeController(ILogger<HomeController> logger, Test t)
{
_logger = logger;
}
当我在 Test.Dispose() 处设置断点时,加载主页后会按预期命中。
现在我更改测试类如下:
public class Test : DbContext
{
public override void Dispose()
{
}
}
现在 Disposed 不再被调用...这是为什么???
我也试过
services.AddDbContext<Test>();
而不是 AddScoped,但这没有区别。
我需要更改什么才能使容器调用像第一种情况那样处理?
(相关问题无答案)
解决方案
您需要覆盖该Dispose(bool)
方法而不是(通常)非虚拟Dispose()
方法。试试这个:
protected override void Dispose(bool disposing)
{
// implementation
}
并设置一个断点,看看它是否命中。这里有更多关于区别的信息: https ://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose
推荐阅读
- javascript - 以编程方式设置选定值 - Mat Select Angular
- javascript - React onClick 适用于重新加载,但不适用于实际点击
- javascript - ag-grid 防止 rowDrop
- javascript - 正则表达式在 Javascript 中获取括号之间和字符串文字内部的字符串
- java - 当我在我的项目库中包含 EclipseLink-ModelGen(JPA 2.1) 时,为什么我的 Java Web 项目会引发错误
- bintray - Bintray 的每晚更新未同步到 JCenter
- php - 有没有办法读取 .env 文件,然后有条件地要求 composer.json 中的包?
- android - 如何理解应该支持哪种架构 apk?
- java - Android 通知未显示用于秒表的 Java
- python - 输入说明