我的类继承自UnityContainer(来自Unity 2.0),这里是源代码:
public class UnityManager : UnityContainer
{
private UnityManager()
{
_context = new MyDataClassesDataContext();
// ...
}
protected override void Dispose(bool disposing)
{
if ( disposing )
{
_context.Dispose();
}
base.Dispose(disposing);
}
private readonly CMCoreDataClassesDataContext _context;
}
当为 UnityManager 类的实例调用 Dispose 方法时,它会进入递归...为什么?据我所知 base.Dispose 应该只调用基类的 Dispose 方法......不是吗?谁回调UnityManager的Dispose(bool)?如何防止这种情况?
谢谢。
最佳答案
多亏了 Nicole,我找到了一个理由……谢谢。 但是在这种情况下如何处理容器呢?如果为 UnityManager 的实例调用“Dispose”,base.Dispose(true) 将再次调用 Dispose.... 并再次(递归将开始)。
为了解决这个问题,我添加了额外的私有(private)变量 bool _bDisposed:
protected override void Dispose(bool disposing)
{
if (_bDisposed)
return;
if ( disposing )
{
_context.Dispose();
}
_bDisposed = true;
base.Dispose(disposing);
}
private bool _bDisposed;
这是 Bill Wagner 在“Effective C#”中建议的“Dispose”模式实现(如果我没记错的话)
关于c# - Unity 中的递归和 Dispose 模式实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2959485/