Dependencyinjection: Dienstleistungen der Reihe nach entsorgen

Erstellt am 8. Nov. 2016  ·  4Kommentare  ·  Quelle: aspnet/DependencyInjection

Dienste sollten in umgekehrter Reihenfolge verworfen werden, in der sie erstellt wurden.

Wenn Service A von Service B abhängt, wird zuerst B erstellt, dann A. Wenn jetzt Dispose() von A aufgerufen wird, muss es möglicherweise B verwenden. Leider ist B möglicherweise bereits verworfen, da die Reihenfolge nicht deterministisch ist und basierend auf einem Wörterbucheintrag. Ich schlage vor, dass wir erzwingen, dass die Entsorgungsreihenfolge sowohl logisch als auch deterministisch ist, sofern die Abhängigkeitsreihenfolge definiert ist.

3 - Done bug

Hilfreichster Kommentar

Danke für das Einschleifen! Dies klingt wie ein weiterer Fall, in dem Annahmen im Framework zu Problemen bei einigen Containerintegrationen führen können.

Die Entsorgung in umgekehrter Reihenfolge ist notwendig, um einige Komponentengraphen korrekt zu löschen, zB wenn A : IDisposable sich bei der Erstellung mit B : IDisposable "registriert" und bei der Entsorgung "unregistriert", aber:

  • Das Framework könnte diese Art von Objektgraphen vermeiden, oder
  • Einige zusätzliche Codes könnten hinzugefügt werden, zB Mediator-Objekte, damit die Szenarien unabhängig von der Entsorgungsreihenfolge funktionieren.

Wenn Benutzer eine Forward-Order-Entsorgung wünschen, sollten sie sich darauf verlassen können, indem sie einen Container auswählen, der sie implementiert - und umgekehrt. Persönlich denke ich, dass die umgekehrte Reihenfolge der _richtige_ Weg ist, aber es ist sehr unwahrscheinlich, dass mir alle zustimmen ;-)

433 ist eine Diskussion in diese Richtung - die Entsorgungsreihenfolge wäre ein guter Punkt, um die Zusammenfassung auf diesem Ticket hinzuzufügen, denke ich.

Alle 4 Kommentare

Ich habe einen Branch , der dies in unserem Container implementiert und Spezifikationstests hinzufügt, aber ich habe einige Bedenken:

  1. Wir verlangen nicht, dass IServiceProvider IDisposable in der Spezifikation sein muss, aber das Hinzufügen dieser Tests erzwingt dies. Weder die Autofac- noch die StructureMap-Implementierung von IServiceProvider ist IDisposable
  2. Autofac tut dies in der richtigen Reihenfolge, aber StructureMap verteilt die Dienste in der Reihenfolge der Erstellung.

@khellang @nblumhardt was

Danke für das Einschleifen! Dies klingt wie ein weiterer Fall, in dem Annahmen im Framework zu Problemen bei einigen Containerintegrationen führen können.

Die Entsorgung in umgekehrter Reihenfolge ist notwendig, um einige Komponentengraphen korrekt zu löschen, zB wenn A : IDisposable sich bei der Erstellung mit B : IDisposable "registriert" und bei der Entsorgung "unregistriert", aber:

  • Das Framework könnte diese Art von Objektgraphen vermeiden, oder
  • Einige zusätzliche Codes könnten hinzugefügt werden, zB Mediator-Objekte, damit die Szenarien unabhängig von der Entsorgungsreihenfolge funktionieren.

Wenn Benutzer eine Forward-Order-Entsorgung wünschen, sollten sie sich darauf verlassen können, indem sie einen Container auswählen, der sie implementiert - und umgekehrt. Persönlich denke ich, dass die umgekehrte Reihenfolge der _richtige_ Weg ist, aber es ist sehr unwahrscheinlich, dass mir alle zustimmen ;-)

433 ist eine Diskussion in diese Richtung - die Entsorgungsreihenfolge wäre ein guter Punkt, um die Zusammenfassung auf diesem Ticket hinzuzufügen, denke ich.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen