9

Ich habe mehrere Artikel auf verschiedenen Websites gesehen, die vorschlagen, zirkuläre Abhängigkeiten zwischen .NET-Assemblys mithilfe der Abhängigkeitsinjektion aufzulösen. Dies kann die Build-Fehler beheben, aber es löst nicht wirklich die zirkuläre Abhängigkeit, oder? Für mich scheint es immer noch einen logischen Fehler in der Architektur zu geben. Bin ich verrückt oder stimmen andere zu 1) Dies ist eine weniger als stellare Verwendung von DI, und 2) nicht der geeignete Weg, zirkuläre Abhängigkeitsprobleme zu lösen?Auflösen von zirkulären Abhängigkeiten mit Abhängigkeitsinjektion

+0

Obwohl im Allgemeinen ein Redesign soll, hier geschehen ist eine Referenz: http://stackoverflow.com/questions/1316518/how-did-microsoft-create-assemblies-that-have-circular-references/1316558# 1316558 – Dykam

Antwort

3

DI ist nicht für die Auflösung von zirkulären Abhängigkeiten gedacht, sondern um die Erzeugung von gut entkoppelten und damit testbaren Komponenten zu erleichtern.

6
  1. Ja, Sie machen es noch schwieriger, sie zu erfassen, indem eine zusätzliche Abstraktionsschicht verwendet wird.
  2. Sie lösen die zirkuläre Abhängigkeit nicht, sondern verstecken sie, indem Sie eine zusätzliche Ebene der Abstraktion hinzufügen, indem Sie die späte Begrenzung verwenden oder/und sie lose koppeln.

Die gleiche Antwort kehrt in den folgenden Beiträge (was ich für Verweise hinzufügen wird), die eine 3. Klasse beide davon abhängen, welche schaffen. Dies bedeutet: Sie sind und verletzen das Prinzip der einheitlichen Verantwortlichkeit. Durch Verschieben (Extrahieren) der Verantwortung, auf die beide Klassen in einer separaten Klasse angewiesen sind, entfernen Sie die zirkuläre Abhängigkeit.

FYI die Single Responsibility Pattern on Wikipedia

Stackoverflow Diskussionen von anderen:

My answer auf Stackoverflow mit einem Beispiel für die Verantwortung in einer separaten Klasse zu extrahieren.

1

Ich werde in meinem $ 0.02 hier werfen, da ich bei der Suche nach „Entfernen von zyklischen Abhängigkeiten“

Ja dies hilfreich Beitrag gefunden. Sie können DI verwenden, um zirkuläre Abhängigkeiten aufzulösen. Der erste Schritt zur Behebung eines Problems besteht darin, es zu finden. Ninject beschwerte sich über meine zirkuläre Abhängigkeit und warf beim Bootstrapping eine hilfreiche Ausnahme auf. Ninject hat es für mich gefunden und zwingt mich, es zu reparieren. Ich könnte betrügen und die Injektion von Eigentum oder die Injektion von Methoden verwenden, aber das bricht meinen Schutz der Klasseninvarianten (worüber ich denke, worüber Sie sich beschweren).

Also eine Stimme für Ctor Injektion über IoC, weil es kreisförmige Abhängigkeiten für Sie erkennen. Es liegt dann an Ihnen, den Architekturfehler zu überarbeiten und zu entfernen.

Verwandte Themen