处理对象是否处理了所有IDisposable属性?

 汜水 发布于 2023-02-03 10:43

这是一个普遍的问题,虽然我确实有一个我正在看的特定实例,所以我试图尽可能保持标题和标签的通用性.

我正在和IOC一起做MVC项目.我的具体存储库实现IDisposable了处理Ef Context.

显然,MVC处理被调用的Controller对象的处理.但是,我需要Dispose()在控制器中覆盖吗?这是我现在的代码:

private IUserRepository repository;

public UserController(IUserRepository repository) {
    this.repository = repository;
}

protected override void Dispose(bool disposing) {
    if (repository is IDisposable && repository != null) {
        (repository as IDisposable).Dispose();
        repository = null;
    }

    base.Dispose(disposing);
}

我检查以确保它IDisposable从我的单元测试中实现为模拟我不认为实现它.

现在,我的问题是超越Dispose()冗余?当Controller(或任何其他对象)被释放时,垃圾收集器是否会查找实现的任何属性IDisposable,或者我是否正确执行此操作?

1 个回答
  • 处置对象不会自动处理其所有属性IDisposables.它所做的只是执行Dispose方法,然后对象所做的就是开发人员.

    当处理类的对象时,它应该处置实现该接口的所有拥有的资源IDisposable.在您的情况下,您处置一个很可能仍在使用的对象.

    我认为Stephen Cleary关于IDisposable的文章:你的母亲从未告诉过你关于资源释放的内容解释了处理对象以及在某些情况下可能出现的困难和问题.

    2023-02-03 10:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有