2010-12-28 20 views
8

Mam dwa projekty klasy w rozwiązanie Visual Studio. Ze względu na charakter tego projektu oba projekty odnoszą się do siebie nawzajem, ponieważ potrzebują wzajemnych usług (pomyśl o zwrotach "Podrapuję się, ty zdradzasz moje").Rozwiązywanie zależności kołowych

Visual Studio (2010) nie pozwala mi dodać odniesienia do projektu b z projektu a, ponieważ projekt już odwołuje się do projektu b.

Jakie są strategie rozwiązania tej zależności cyklicznej?

Dzięki

Odpowiedz

8

Istnieją dwie typowe metody można użyć:

1) połączyć oba projekty w jednym projekcie.

alt text

2) Znajdź wspólnych części obu projektów i czynnik je do osobnego trzeciego projektu.

alt text

+0

punkt 2 jest o wiele bardziej zorientowany na OOP. –

2

Żadne inne niż "muszę to złamać". Albo oddziel je, albo połącz je w jeden moduł.

4

byłaby niezależne usługi (te nie zależą od innych projektów) do trzeciej klasy biblioteki i mają zarówno projekty referencyjne ten trzeci.

Z drugiej strony, jeśli oba projekty są tak ściśle powiązane, należy również rozważyć połączenie ich w jeden projekt.

1

Jeden projekt może ujawniać interfejsy, które wdraża drugi projekt, a następnie nie musi już odwoływać się do innego projektu.

0

Mamy podobną sytuację, w której musimy uzyskać połączenie z klasą dbCon, aby uzyskać ciąg dbConnection od projektu a do projektu b. Rozwiązaliśmy go, przechowując go w tabeli dbconfig w bazie danych i przekazując jako parametr do projektu b.

0

Prawdopodobnie właściwym rozwiązaniem jest rozbicie części "projektu a" i "projektu b" na "projekt c". Wtedy A i B zależą od C, a żadna z nich nie zależy od drugiej.

Nie ma możliwości uzyskania prawdziwej zależności cyklicznej, poza pewnym przyrostowym procesem kompilacji, w którym tworzysz plik A.dll zawierający wszystko, czego B.dll potrzebuje, ale nic, czego BDP potrzebuje, a następnie zamień go na nowy, który został zbudowany przy użyciu nowo utworzonego pliku B.dll i zawiera rzeczy zależne od niego. W końcu taka złożona strategia z pewnością nie byłaby tego warta.

Może być również możliwe budowanie modułów sieciowych, a następnie łączenie ich w jeden zespół za pomocą narzędzia Assembly Linker, ale ponownie wynik nie będzie uzasadniał nakładu pracy.

Powiązane problemy