依存関係注入を使用して.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. xcodeの循環依存関係エラーを解決するには
- 4. 型定義の循環依存関係を解決する
- 5. Maven循環依存関係を解決する方法
- 6. 循環依存関係を解決する
- 7. 循環依存関係エラー私の解決策では、基準
- 8. 依存関係を配線する際の循環依存関係
- 9. 宣言の循環依存関係
- 10. 複数の循環依存関係C++
- 11. 参照の循環依存関係
- 12. Gradleの循環依存関係
- 13. Laravelの依存関係注入による抽象クラスの依存関係の解決
- 14. 依存関係ツリーの制御ロジック - 循環依存関係の検索
- 15. java.lang.IllegalStateException:循環依存関係はRelativeLayout
- 16. sqlalchemy.exc.CircularDependencyError:循環依存関係が
- 17. 循環依存関係エラーninject
- 18. 循環依存関係と動的アセンブリローディング
- 19. ランタイムデータとの依存関係を解決するための依存性注入
- 20. Python相互依存クラス(循環依存関係)
- 21. 依存関係の依存関係
- 22. 依存関係のプロパティ依存関係
- 23. リポジトリ間の循環依存関係を解消する方法
- 24. 依存関係注入を使ってポストシャープからログ依存関係を解決する方法
- 25. 依存関係を解決する
- 26. Mavenの依存関係の解決は
- 27. エクスプレスサーバーの依存関係の解決
- 28. Angular2での依存関係の解決
- 29. Linuxの依存関係の解決
- 30. Mavenの依存関係の解決
一般的に再設計を行う必要がありますが、参考にしてください: http://stackoverflow.com/questions/1316518/how-did-microsoft-create-assemblies-that-have-circular-references/1316558# 1316558 – Dykam