Dependencyinjection: ServiceProvider.Dispose sollte nicht aufhören, wenn ein schlechter Dienst auf Dispose wirft

Erstellt am 16. März 2017  ·  6Kommentare  ·  Quelle: aspnet/DependencyInjection

Wenn es derzeit einen schlecht implementierten Dienst gibt, der Dispose auslöst, dann stoppt das gesamte Dispose und bläst auf, da es beim Aufzählen kein Try/Catch in ServiceProvider.Dispose() gibt .

Idealerweise sollte Dispose bei jeder Serviceimplementierung nicht ausgelöst werden, aber der ServiceProvider könnte gegenüber diesem typischen Problem etwas widerstandsfähiger sein und versuchen, so viel wie möglich zu bereinigen und dann die Ausnahme (oder die aggregierte Ausnahme?) Auch wenn man etwas vorsichtig ist, kann man diese Probleme bei der Implementierung eines Dienstes manchmal leicht übersehen, zumal die Dispose-Reihenfolge nicht unbedingt intuitiv ist (siehe https://github.com/aspnet/DependencyInjection/issues/463).

Die Gedanken?

Hilfreichster Kommentar

Mein Bauchgefühl sagt, dass, wenn ein Service während des Disponierens wirft, alle Wetten weg sind. Wie soll die Anwendung nach einem solchen Scheitern weitergeführt werden? (Dies setzt voraus, dass dies nicht während des Herunterfahrens der Fall ist. In diesem Fall denke ich, dass dies sowieso keine Rolle spielt.)

Alle 6 Kommentare

Wir könnten, aber Sie könnten Ihren Code so korrigieren, dass er nicht entsorgt wird. Ich bin mir nicht einmal sicher, in welchem ​​Zustand sich das Objekt zu diesem Zeitpunkt befindet ...

https://msdn.microsoft.com/en-us/library/fs2xkftw (v=vs.110).aspx

Eine Dispose-Methode sollte mehrmals aufrufbar sein, ohne eine Ausnahme auszulösen

Ich bin mir nicht sicher, ob das Werfen, wenn es einmal aufgerufen wird, ein gültiger Eckfall ist 😉

Ja, ich habe meinen Code bereits korrigiert. Dachte immer noch, dass ServiceProvider etwas widerstandsfähiger sein sollte, da es dazu gedacht ist, vollständig entkoppelte Objektgraphen zusammenzukleben. Ein schlechter Apfel in einem großen System sollte also nicht den gesamten Container stoppen, um alle anderen korrekt erstellten Dienste nicht mehr zu entsorgen.
Nur meine 2 Cent.

Mein Bauchgefühl sagt, dass, wenn ein Service während des Disponierens wirft, alle Wetten weg sind. Wie soll die Anwendung nach einem solchen Scheitern weitergeführt werden? (Dies setzt voraus, dass dies nicht während des Herunterfahrens der Fall ist. In diesem Fall denke ich, dass dies sowieso keine Rolle spielt.)

Im Fall der Verantwortung - ich würde argumentieren, dass es nicht in der Verantwortung des Diensteanbieters liegt, mit einer fehlerhaften Entsorgungslogik umzugehen.

Stimmt mit

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen