我的类继承自UnityContainer (来自Unity2.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的处置(Bool)?如何防止这种情况发生?
谢谢。
发布于 2010-06-03 05:54:11
多亏了妮可我找到了一个理由。谢谢。但是在这种情况下如何处理容器呢?如果调用' Dispose‘,例如UnityManager,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”模式实现(如果我没有错的话)
发布于 2010-06-03 01:05:23
您是否在容器中注册了UnityManager实例?如果是这样,当容器被释放时,它将被容器释放。
https://stackoverflow.com/questions/2959485
复制相似问题