我的类继承自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)?怎么预防?
感谢。
答案 0 :(得分:2)
感谢妮可,我找到了一个理由......谢谢。 但是在这种情况下如何处置容器?如果为UnityManager的例子调用'Dispose',base.Dispose(true)将再次调用Dispose ....再次(递归将开始)。
为了解决这个问题,我添加了额外的私有变量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”模式实现(如果我没有任何错误)
答案 1 :(得分:1)
您是否在容器中注册了UnityManager实例?如果是这样,当容器被丢弃时,它将由容器处理。