À l'aide de Disposer sur un Singleton pour nettoyer les Ressources

La question que j'ai peut-être plus à voir avec la sémantique que l'utilisation réelle de IDisposable. Je suis en train de travailler sur la mise en œuvre d'une classe singleton qui est en charge de la gestion d'une instance de base de données qui est créé lors de l'exécution de l'application. Lorsque l'application se ferme cette base de données devrait être supprimé.

Droit maintenant, j'ai ce supprimer gérée par un Cleanup() méthode du singleton que l'application appelle quand il est en cours de fermeture. Comme je l'écrivais la documentation pour Cleanup() il m'a semblé que j'avais décrit ce qu'est un Dispose() méthode doit être utilisée pour exemple le nettoyage des ressources. J'avais initialement pas mis en œuvre IDisposable parce qu'il semblait sortir de la place dans mon singleton, parce que je ne voulais rien à jeter le singleton lui-même. Il n'y a pas actuellement, mais à l'avenir, pourrait être une raison pour que cette Cleanup() pourrait être appelé, mais le singleton devrait aurez besoin d'exister encore. Je pense que je peux inclure GC.SuppressFinalize(this); dans la méthode dispose pour rendre cela possible.

Ma question est donc multi-parted:

1) Est la mise en œuvre de IDisposable sur un singleton fondamentalement une mauvaise idée?

2) Suis-je juste le mélange de la sémantique ici par le fait d'avoir un Cleanup() au lieu d'un Dispose() et depuis que je suis disposer de ressources que j'ai vraiment devrait utiliser un aliéner?

3) la mise en œuvre de la "Dispose ()" avec GC.SuppressFinalize(this); faire en sorte que mon singleton n'est pas réellement détruits dans le cas où je veux vivre après un appel à un nettoyage de la base de données.

OriginalL'auteur Craig Suchanec | 2010-05-28