首页 > 解决方案 > 未使用依赖注入处理 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,但这没有区别。

我需要更改什么才能使容器调用像第一种情况那样处理?

(相关问题无答案

标签: c#dependency-injectiondbcontext

解决方案


您需要覆盖该Dispose(bool)方法而不是(通常)非虚拟Dispose()方法。试试这个:

protected override void Dispose(bool disposing)
{
// implementation
}

并设置一个断点,看看它是否命中。这里有更多关于区别的信息: https ://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose


推荐阅读