2010-12-28 23 views
8

Visual Studioソリューションには2つのクラスプロジェクトがあります。プロジェクトの性質上、両方のプロジェクトがお互いのサービスを必要としているため、両方のプロジェクトが互いに参照し合う(「私はあなたの背中を傷つけ、あなたは私の傷をつかむ」と考える)。循環依存関係を解決する

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

この循環依存性を解決するための戦略はありますか?

ありがとうございました

答えて

8

あなたが使用できる2つの典型的なアプローチがあります。

alt text

2)は、二つのプロジェクトの共通部分を見つけ、別の第三のプロジェクトにそれらを考慮します。

alt text

+0

点2ははるかにOOP指向です。 –

2

「gotta break it」以外はありません。 2つを分離するか、1つのモジュールにまとめてください。

1)は、単一のプロジェクトに両方のプロジェクトを組み合わせる:

4

リファクタリング独立第三のクラスライブラリのサービス(他のプロジェクトに依存しないもの)との両方のプロジェクトを持っているが、この第三のいずれかを参照します。

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

1

1つのプロジェクトで、他のプロジェクトが実装するインターフェイスが公開され、もう一方のプロジェクトへの参照が不要になります。

0

私たちは、dbConnectionを呼び出すときに、プロジェクトaからプロジェクトbにdbConnection文字列を取得する必要があるのと同様の状況がありました。我々はデータベースのdbconfigテーブルにそれを格納し、それをパラメータとしてプロジェクトbに渡すことで解決しました。

0

「プロジェクトa」と「プロジェクトb」の一部を「プロジェクトc」に分割するのが適切な解決策である可能性があります。それから、AとBはどちらもCに依存し、どちらも他に依存しません。

B.dllに必要なものすべてを含むA.dllをビルドするインクリメンタルビルドプロセスの外で、実際の循環依存性を持たせる方法はありませんが、B.dllには必要なものはありません。その後、新しくビルドされたB.dllを使用してビルドされており、それに依存するものが含まれています。結局のところ、そのような複雑な戦略は確かにそれに値するものではありません。

ネットモジュールを作成し、後でAssembly Linkerを使用してアセンブリに組み込むこともできますが、その結果、関連する作業が正当化されません。

関連する問題