Вопрос, который у меня есть, может быть больше связан с семантикой, чем с фактическим использованием IDisposable
. Я работаю над реализацией одноэлементного класса, который отвечает за управление экземпляром базы данных, созданным во время выполнения приложения. Когда приложение закроется, эта база данных должна быть удалена.
Прямо сейчас у меня это удаление обрабатывается методом Cleanup()
синглтона, который приложение вызывает при закрытии. Когда я писал документацию для Cleanup()
, мне пришло в голову, что я описываю, для чего следует использовать метод Dispose()
, то есть для очистки ресурсов. Первоначально я не реализовал IDisposable
, потому что это казалось неуместным в моем синглтоне, потому что я не хотел, чтобы что-то удаляло сам синглтон. В настоящее время нет, но в будущем может быть причина, по которой этот Cleanup()
может быть вызван, но синглтон должен будет существовать. Я думаю, что могу включить GC.SuppressFinalize(this);
в метод Dispose, чтобы сделать это возможным.
Поэтому мой вопрос состоит из нескольких частей:
1) Является ли реализация IDisposable
на синглтоне принципиально плохой идеей?
2) Я просто смешиваю здесь семантику, имея Cleanup()
вместо Dispose()
, и, поскольку я распоряжаюсь ресурсами, мне действительно следует использовать dispose?
3) Будет ли реализация 'Dispose()' с GC.SuppressFinalize(this);
сделать так, чтобы мой синглтон фактически не уничтожался в случае, если я хочу, чтобы он жил после вызова для очистки базы данных.