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