9

依存関係注入を使用して.NETアセンブリ間の循環依存関係を解決することを提案するさまざまなWebサイトに関する記事をいくつか見てきました。これはビルドエラーを解決するかもしれませんが、循環依存性を実際に解決していませんか?私にとって、アーキテクチャにはまだ論理的な誤りがあるようです。私は狂っているのだろうか他の人が同意するのか1)これはDIの恒例の使用ではなく、2)循環依存問題を解決する適切な方法ではないか?依存関係注入による循環依存関係の解決

+0

一般的に再設計を行う必要がありますが、参考にしてください: http://stackoverflow.com/questions/1316518/how-did-microsoft-create-assemblies-that-have-circular-references/1316558# 1316558 – Dykam

答えて

3

DIは循環依存性の解決ではなく、うまく切り離されたコンポーネントの作成を容易にし、したがってよりテスト可能なものを容易にするためです。

6
  1. はい、あなたは、抽象化の余分な層を使用することによって、それらを検出することがさらに困難にします。
  2. 循環依存を解決するのではなく、余分な抽象レイヤーを追加したり、遅い境界線を使用したり、疎結合したりすることで非表示にします。

両方を依存している第三のクラスを作成である(私は参照を追加します)、次の記事で同じ答えを返します。これは、であり、単一責任原則に違反しています。責任を移動(抽出)することにより、両方のクラスは別のクラスに依存します。循環依存を削除します。

他人によってFYI Single Responsibility Pattern on Wikipedia

StackOverflowのディスカッション:StackOverflowの上

My answer別々のクラスの責任を抽出する例を有します。

1

私は

はい「を循環的な依存関係を取り除く」を検索することで、この役に立つ記事を見つけたので、私はここに私の$ 0.02投げます。 DIを使用して循環依存関係を解決することができます。問題を解決するための第一歩は、それを見つけることです。 Ninjectは私の循環依存について不満を持ち、ブートストラップ時に役立つ例外を投げた。 Ninjectは私のためにそれを見つけ、それを修正するように強制しています。私は不正行為をしたり、プロパティインジェクションやメソッドインジェクションを使うことができますが、それはクラスインバリアントの保護を壊してしまいます(私はあなたが不平を言っていると思います)。

したがって、IoCを介したctor注入の投票は、あなたのために循環依存を見つけることになるでしょう。それから、あなたはアーキテクチャのバグをリファクタリングして削除する必要があります。

関連する問題