8

Visual Studio ソリューションに 2 つのクラス プロジェクトがあります。プロジェクトの性質上、両方のプロジェクトは互いのサービスを必要とするため、お互いを参照します (「私はあなたの背中を掻き、あなたは私の背中を掻く」というフレーズを考えてみてください)。

Visual Studio (2010) では、プロジェクト a からプロジェクト b への参照を追加できません。これは、プロジェクト a が既にプロジェクト b を参照しているためです。

この循環依存を解決するためにどのような戦略がありますか?

ありがとう

4

6 に答える 6

8

使用できる一般的な方法は 2 つあります。

1) 両方のプロジェクトを 1 つのプロジェクトに結合します。

代替テキスト

2) 2 つのプロジェクトの共通部分を見つけて、それらを別の 3 番目のプロジェクトに分解します。

代替テキスト

于 2010-12-28T18:28:57.510 に答える
4

独立したサービス (他のプロジェクトに依存しないもの) を 3 番目のクラス ライブラリにリファクタリングし、両方のプロジェクトがこの 3 番目のライブラリを参照するようにします。

一方、2 つのプロジェクトが非常に緊密に結合されている場合は、それらを 1 つのプロジェクトに結合することも検討する必要があります。

于 2010-12-28T18:29:02.653 に答える
2

「壊さなきゃ」にほかならない。2 つを分離するか、1 つのモジュールに結合します。

于 2010-12-28T18:28:05.290 に答える
1

一方のプロジェクトは、他方のプロジェクトが実装するインターフェースを公開でき、その後、もう一方のプロジェクトへの参照は必要ありません。

于 2010-12-28T18:30:08.447 に答える
0

プロジェクト a からプロジェクト b への dbConnection 文字列を取得するために、dbCon クラスを呼び出す必要がある同様の状況がありました。データベースの dbconfig テーブルに保存し、プロジェクト b にパラメーターとして渡すことで解決しました。

于 2010-12-28T18:30:31.813 に答える
0

おそらく正しい解決策は、「プロジェクト a」と「プロジェクト b」の一部を「プロジェクト c」に分割することです。次に、A と B の両方が C に依存し、どちらも他方に依存しません。

B.dll が必要とするすべてのものを含む A.dll をビルドし、B.dll が必要とするものを何も含まない A.dll をビルドし、その後、使用してビルドされた新しいものに置き換えるインクリメンタル ビルド プロセス以外では、真の循環依存関係を持つ方法はありません。新しく構築された B.dll とそれに依存するものが含まれています。結局、そのような複雑な戦略は確かに価値がありません。

また、ネットモジュールを構築し、後でアセンブリ リンカーを使用してそれらをアセンブリに結合することも可能かもしれませんが、その結果は、関連する労力を正当化するものではありません。

于 2010-12-28T18:33:45.850 に答える