我有一个问题,可能与语义有关,而不是与实际使用IDisposable有关。我正在实现一个单例类,负责管理在应用程序执行期间创建的数据库实例。当应用程序关闭时,应该删除此数据库。
目前,我通过单例的Cleanup()方法处理这个删除,应用程序在关闭时调用它。当我为Cleanup()编写文档时,我意识到我正在描述Dispose()方法应该用于清理资源的内容。最初,我没有实现IDisposable,因为它似乎在我的单例中不合适,因为我不想让任何东西处理单例本身的释放。目前并没有,但将来可能会有一个原因,即需要调用Cleanup(),但单例仍需要存在。我认为我可以在Dispose方法中包含GC.SuppressFinalize(this);来使这成为可能。
因此,我的问题有多个部分:
1)在单例上实现IDisposable基本上是一个坏主意吗?
2)我是否仅仅是混淆了语义,通过使用Cleanup()而不是Dispose(),而且由于我正在处理资源,我真的应该使用Dispose()吗?
3)使用GC.SuppressFinalize(this)实现Dispose()会使得我的单例在清理数据库后实际上没有被销毁吗?
目前,我通过单例的Cleanup()方法处理这个删除,应用程序在关闭时调用它。当我为Cleanup()编写文档时,我意识到我正在描述Dispose()方法应该用于清理资源的内容。最初,我没有实现IDisposable,因为它似乎在我的单例中不合适,因为我不想让任何东西处理单例本身的释放。目前并没有,但将来可能会有一个原因,即需要调用Cleanup(),但单例仍需要存在。我认为我可以在Dispose方法中包含GC.SuppressFinalize(this);来使这成为可能。
因此,我的问题有多个部分:
1)在单例上实现IDisposable基本上是一个坏主意吗?
2)我是否仅仅是混淆了语义,通过使用Cleanup()而不是Dispose(),而且由于我正在处理资源,我真的应该使用Dispose()吗?
3)使用GC.SuppressFinalize(this)实现Dispose()会使得我的单例在清理数据库后实际上没有被销毁吗?