Auflösung der zirkulären Abhängigkeit

8

Ich habe zwei Klassenprojekte in einer Visual Studio-Lösung. Aufgrund der Art des Projekts verweisen beide Projekte aufeinander, weil sie die Dienste des jeweils anderen brauchen (denke an den Satz "Ich kratze deinen Rücken, du kratzst an mir").

In Visual Studio (2010) kann ich keinen Verweis auf Projekt b aus Projekt a hinzufügen, da Projekt a bereits auf Projekt b verweist.

Welche Strategien gibt es, um diese zirkuläre Abhängigkeit zu lösen?

Danke

    
dotnetdev 28.12.2010, 18:26
quelle

6 Antworten

8

Es gibt zwei typische Ansätze, die Sie verwenden können:

1) Kombinieren Sie beide Projekte zu einem Projekt.

2) Finden Sie die gemeinsamen Teile der beiden Projekte und zerlegen Sie sie in ein separates drittes Projekt.

    
Mark Byers 28.12.2010, 18:28
quelle
4

Refactorieren Sie die unabhängigen Services (die nicht von den anderen Projekten abhängig sind) zu einer dritten Klassenbibliothek und lassen Sie beide Projekte auf diese dritte referenzieren.

Wenn andererseits die beiden Projekte so eng miteinander verbunden sind, sollten Sie darüber nachdenken, sie zu einem Projekt zusammenzufassen.

    
Babak Naffas 28.12.2010 18:29
quelle
2

Kein anderer als "muss es kaputt machen". Entweder trennen Sie die beiden oder kombinieren Sie sie zu einem einzigen Modul.

    
duffymo 28.12.2010 18:28
quelle
1

Ein Projekt kann Schnittstellen bereitstellen, die das andere Projekt implementiert, und benötigt dann keinen Verweis mehr auf das andere Projekt.

    
Rick Sladkey 28.12.2010 18:30
quelle
0

Wir hatten eine ähnliche Situation, in der wir die Klasse dbCon aufrufen müssen, um die dbConnection-Zeichenfolge von Projekt a nach Projekt b zu holen. Wir haben es gelöst, indem wir es in der Datenbank dbconfig in der Datenbank gespeichert und als Parameter an das Projekt übergeben haben b.

    
A_Var 28.12.2010 18:30
quelle
0

Wahrscheinlich ist die richtige Lösung, einen Teil von "Projekt a" und "Projekt b" in ein "Projekt c" zu zerlegen. Dann hängen A und B beide von C ab, und keiner hängt von dem anderen ab.

Es gibt keine Möglichkeit, eine echte zirkuläre Abhängigkeit außerhalb eines inkrementellen Buildprozesses zu erstellen, in dem Sie A.dll erstellen, das alles enthält, was B.dll benötigt, aber nichts, was B.dll benötigt, und es anschließend durch ein neues ersetzen wurde mit der neu gebauten B.dll erstellt und enthält Dinge, die davon abhängen. Am Ende wäre eine solch komplexe Strategie sicherlich nicht lohnenswert.

Es könnte auch möglich sein, Netzwerkmodule zu erstellen und später mit dem Assembly Linker zu einer Assembly zusammenzufassen, aber das Ergebnis würde den Aufwand nicht rechtfertigen.

    
Mark 28.12.2010 18:33
quelle

Tags und Links