如果我的基本控制器重写了用于处理dbcontext的void Dispose(),是否需要在子控制器中对其进行处理?

时间:2018-08-05 08:31:02

标签: asp.net-mvc

在我的BaseController中

public class BaseController : Controller
    {
        protected ApplicationDbContext context;

        public BaseController()
        {
           context = new ApplicationDbContext();
        }

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

    }

在我的HomeController中

    public class HomeController : BaseController
        {
            public HomeController ()
            {
            }

//is this method still necessary?
            protected override void Dispose(bool disposing)
            {
                context.Dispose();
                base.Dispose(disposing);
            }
    }

如果我的BaseController已经具有override void Dispose(bool disposing)来处理dbcontext,这是否意味着扩展它的控制器不再需要override void Dispose(bool disposing)来处理dbcontext?

1 个答案:

答案 0 :(得分:1)

当您从实现IDisposable的类继承时,只有对自己的自己做一些清理,才应覆盖Dispose(bool)方法。

您应该始终假设基类正在清理它们的混乱,并且只照顾您创建的新混乱(如果需要),然后让他们这样做通过调用base.Dispose if 来覆盖Dispose

(类似地,如果您要使用一次性资源编写基类,则应确保使用自己的Dispose清理自己的混乱)。