我正在开发一个MVC 5互联网应用程序。我的控制器中有以下方法:
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
如果我在此控制器中有一个使用相同db
对象的服务类,我是否需要在此服务类中使用Dispose()
方法,或者使用Dispose()
方法在控制器中处理这个?
提前致谢。
答案 0 :(得分:4)
一般情况下:班级应处理其负责的任何一次性用品。责任本质上归结为它是否“拥有”依赖性。换句话说,如果它是该类和上的一个字段,该类将其实例化,那么它也应该将其处理掉。
对于您的服务,虽然服务类上可能存在上下文字段,但您通过构造函数将上下文注入服务,而不是让服务实例化它。因此,不适合处理上下文的服务,因为它不“拥有”它。
此外,如果您使用依赖注入容器,使控制器不再实例化上下文,而只是将其注入其构造函数中,那么您也不应该将它丢弃在控制器中。 DI容器最终将负责处置。