在典型的分层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);
}
我已经把(我在下面)认为是正确的,但并不完全确定。
问题。以上代码是否会清除所有非托管资源,例如:数据库连接? (即我所做的正确)
答案 0 :(得分:1)
不,不在MyRepository
,因为你已经继承了IMyRepository