Asp.net mvc 如何在MVC存储库模式体系结构中实现Dispose模式

Asp.net mvc 如何在MVC存储库模式体系结构中实现Dispose模式,asp.net-mvc,repository-pattern,dispose,Asp.net Mvc,Repository Pattern,Dispose,在阅读了大量关于如何在一个典型的分层MVC架构中实现Dispose模式的内容后,我遇到了很多答案,甚至是矛盾,这让我感到困惑 我使用的是域模型模式和存储库模式。注意,不使用UoW或依赖项注入。我可能很快就会使用DI(还不确定),这意味着体系结构会发生变化,Dispose技术也会发生变化 不管怎样,这是代码 控制器 protected override void Dispose(bool disposing) { _myService.Dispose();

在阅读了大量关于如何在一个典型的分层MVC架构中实现Dispose模式的内容后,我遇到了很多答案,甚至是矛盾,这让我感到困惑

我使用的是域模型模式和存储库模式。注意,不使用UoW或依赖项注入。我可能很快就会使用DI(还不确定),这意味着体系结构会发生变化,Dispose技术也会发生变化

不管怎样,这是代码

控制器

    protected override void Dispose(bool disposing)
    {
        _myService.Dispose();

        // Call base class implementation
        base.Dispose(disposing);
    }
服务

    public void Dispose()
    {
        _myRepository.Dispose();
    }

public interface IMyRepository : IDisposable
存储库

额外问题:此处是否需要IDisposable

    public class MyRepository : IMyRepository, IDisposable


    // Flag, has Dispose already been called?
    private bool disposed = false;

    // Protected implementation of Dispose pattern
    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                // Free any other managed objects here
                _context.Dispose();
            }
        }

        // Free any unmanaged objects here
        this.disposed = true;
    }

    // Public implementation of Dispose pattern callable by consumers
    public void Dispose()
    {
        // Dispose of unmanaged resources
        Dispose(true);
        // Suppress finalization
        GC.SuppressFinalize(this);
    }
我已经把我认为是正确的东西(下面)放在一起,但不是完全确定


问题。上述代码是否会清理所有非托管资源,例如数据库连接?(即我所做的是正确的)

不,不是在
MyRepository
上,因为您已经继承了它,尽管
IMyRepository

对此不确定,也就是说,实现接口不仅仅是将您绑定到实现方法、属性、事件的契约上。。。在具体类中,还做继承。谢谢。您问了一些相关问题,我建议您将最感兴趣的问题编辑并放在最后一行,用粗体,然后用非粗体。否则答案可能会选择最简单的答案,而忽略其他答案。我想最重要的一个是“这会清理所有非托管资源(数据库连接等)”,谢谢你的提示,更新了它:)我只是在查看其他内容时偶然发现了这一点,存储库类和它的接口类都包含IDisposable。这是由一位Microsoft web人员编写的: