如何在MVC Repository模式体系结构中实现Dispose模式

时间:2014-07-15 00:47:44

标签: asp.net-mvc repository-pattern 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);
    }

我已经把(我在下面)认为是正确的,但并不完全确定。

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

1 个答案:

答案 0 :(得分:1)

不,不在MyRepository,因为你已经继承了IMyRepository