Il y a essentiellement deux façons j'ai vu, c'est géré:
- Lorsque vous résolvez un service à un objet qui implémente IDisposable, le conteneur ne l'oubliez pas. Lorsque vous jetez le récipient, ce service va être éliminés en tant que bien.
- Lorsque vous résolvez un service, ce que vous obtenez en retour n'est pas seulement l'objet de service lui-même, mais vous obtenez également un objet wrapper, qui implémente IDisposable, et vous oblige à vous en débarrasser. Lorsque vous le faites, il permettra aussi de savoir quoi faire avec le réel de l'objet de service que vous avez demandé.
De la 2, la troisième est la plus commune:
- Lorsque vous résoudre à un service qui mettent en œuvre des IDisposable, ne donnent pas une merde et il suffit de laisser le service objet flottant jusqu'à ce que la collecte des ordures gère.
C'est fondamentalement juste le Cio cadre pas vous fournir tous les moyens à tous de gérer ce problème. Si vous le faites, c'est votre cas, ne pas le cadre de la responsabilité.
Mais, attendez, le problème devient de plus en plus poilu, si vous le considérez.
Que faire si l'objet du service, vous obtenez en retour est un singleton? Même si cela peut mettre en œuvre IDisposable, devriez-vous vous en débarrasser? Comment savez-vous? Comment pouvez-vous le trouver? Pouvez - vous découvrir? Au moment où vous dites "je sais que ce service soit un singleton", vous avez en fait prendre une sorte de dépendance et mis en œuvre un code spécial pour le gérer. Le point de Cio est d'être capable de se substituer à des services sans changer le code qui les consume. IDisposable jette un gros bâton dans les roues de ce processus.
En bref, la meilleure solution avec la plupart des aujourd'hui Cio cadres est de mettre en place des services qui ne pas, mettre en oeuvre et nécessitent IDisposable.