依存関係注入を使用して.NETアセンブリ間の循環依存関係を解決することを提案するさまざまなWebサイトに関する記事をいくつか見てきました。これはビルドエラーを解決するかもしれませんが、循環依存性を実際に解決していませんか?私にとって、アーキテクチャにはまだ論理的な誤りがあるようです。私は狂っているのだろうか他の人が同意するのか1)これはDIの恒例の使用ではなく、2)循環依存問題を解決する適切な方法ではないか?依存関係注入による循環依存関係の解決
答えて
DIは循環依存性の解決ではなく、うまく切り離されたコンポーネントの作成を容易にし、したがってよりテスト可能なものを容易にするためです。
2つのオブジェクトの間に循環依存関係がある場合は、2つのオブジェクトが依存する3つ目のオブジェクトが必要なため、相互に依存しません。ここにあなたの問題の厳密解である物品である:
http://misko.hevery.com/2008/08/01/circular-dependency-in-constructors-and-dependency-injection/
+1素晴らしいリンク - その記事は本当によく説明しています! – Ergwun
- はい、あなたは、抽象化の余分な層を使用することによって、それらを検出することがさらに困難にします。
- 循環依存を解決するのではなく、余分な抽象レイヤーを追加したり、遅い境界線を使用したり、疎結合したりすることで非表示にします。
両方を依存している第三のクラスを作成である(私は参照を追加します)、次の記事で同じ答えを返します。これは、であり、単一責任原則に違反しています。責任を移動(抽出)することにより、両方のクラスは別のクラスに依存します。循環依存を削除します。
他人によってFYI Single Responsibility Pattern on Wikipedia
StackOverflowのディスカッション:StackOverflowの上
- business-logic-layer-and-data-access-layer-circular-dependency
- are-circular-class-dependencies-bad-from-a-coding-style-point-of-view
My answer別々のクラスの責任を抽出する例を有します。
私は
はい「を循環的な依存関係を取り除く」を検索することで、この役に立つ記事を見つけたので、私はここに私の$ 0.02投げます。 DIを使用して循環依存関係を解決することができます。問題を解決するための第一歩は、それを見つけることです。 Ninjectは私の循環依存について不満を持ち、ブートストラップ時に役立つ例外を投げた。 Ninjectは私のためにそれを見つけ、それを修正するように強制しています。私は不正行為をしたり、プロパティインジェクションやメソッドインジェクションを使うことができますが、それはクラスインバリアントの保護を壊してしまいます(私はあなたが不平を言っていると思います)。
したがって、IoCを介したctor注入の投票は、あなたのために循環依存を見つけることになるでしょう。それから、あなたはアーキテクチャのバグをリファクタリングして削除する必要があります。
- 1. 循環依存関係は、
- 2. 型定義の循環依存関係を解決する
- 3. 循環依存関係を解決する
- 4. Maven循環依存関係を解決する方法
- 5. 複数の循環依存関係C++
- 6. 宣言の循環依存関係
- 7. Gradleの循環依存関係
- 8. 依存関係ツリーの制御ロジック - 循環依存関係の検索
- 9. 循環依存関係と動的アセンブリローディング
- 10. 循環依存関係エラーninject
- 11. sqlalchemy.exc.CircularDependencyError:循環依存関係が
- 12. Python相互依存クラス(循環依存関係)
- 13. 依存関係のプロパティ依存関係
- 14. 依存関係の依存関係
- 15. 依存関係注入を使ってポストシャープからログ依存関係を解決する方法
- 16. リポジトリ間の循環依存関係を解消する方法
- 17. 依存関係を解決する
- 18. Mavenの依存関係の解決は
- 19. Linuxの依存関係の解決
- 20. Mavenの依存関係の解決
- 21. Sinatraアプリケーションの依存関係の注入
- 22. 依存関係注入とASP.Netメンバーシッププロバイダ
- 23. コアデータオブジェクト注入(依存関係あり)ストーリーボード
- 24. C#クラスライブラリプロジェクト依存関係注入ブートストラップ
- 25. 依存性注入対管理依存関係対グローバルオブジェクト
- 26. 依存関係
- 27. 異なるスコープの依存関係内のMaven依存関係
- 28. コレクション内の循環依存関係を見つけるC#
- 29. django、squashマイグレーション、循環の依存関係が多すぎる
- 30. AngularJSコントローラの依存関係注入を理解する
一般的に再設計を行う必要がありますが、参考にしてください: http://stackoverflow.com/questions/1316518/how-did-microsoft-create-assemblies-that-have-circular-references/1316558# 1316558 – Dykam