MVC 5 - 控制器 dispose 方法

5

我正在开发一个MVC5互联网应用程序。我在我的控制器中有以下方法:

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        db.Dispose();
    }
    base.Dispose(disposing);
}

如果我在这个控制器中有一个服务类,该服务类使用相同的 db 对象,那么我是否需要在此服务类中拥有一个 Dispose() 方法?还是控制器中的 Dispose() 方法会处理这个问题?

提前致谢。


取决于您如何创建服务类的实例。 - tmg
抱歉,我没有仔细阅读你的问题。由于你在控制器中使用了相同的DbContext实例,我认为你不需要在服务类中进行处理。 - tmg
1个回答

5
一般而言:类应处理其负责的任何可处理对象。责任基本上归结为它是否“拥有”依赖项。换句话说,如果它是该类上的字段,且该类对其进行实例化,则它也应将其处理掉。
在您的服务中,虽然服务类可能有一个上下文字段,但是您是通过构造函数将上下文注入到服务中的,而不是让服务进行实例化。因此,服务不应处置上下文,因为它没有“拥有”它。
此外,如果您使用依赖注入容器,以使控制器不再实例化上下文,而只是将其注入到其构造函数中,则您也不应在控制器中处置它。 DI容器最终会负责处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接