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
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.
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.
Ein Projekt kann Schnittstellen bereitstellen, die das andere Projekt implementiert, und benötigt dann keinen Verweis mehr auf das andere Projekt.
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.
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.
Tags und Links .net circular-dependency