Asp.net mvc 如何在MVC存储库模式体系结构中实现Dispose模式
在阅读了大量关于如何在一个典型的分层MVC架构中实现Dispose模式的内容后,我遇到了很多答案,甚至是矛盾,这让我感到困惑 我使用的是域模型模式和存储库模式。注意,不使用UoW或依赖项注入。我可能很快就会使用DI(还不确定),这意味着体系结构会发生变化,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();
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人员编写的: