2009-05-29 18 views
0

してくださいは、最初に次のスレッドを読んで:インターフェイスを実装循環参照(再び...)

Circular reference between Assemblies in C# and Visual Studio 2005

は私の問題を解決するが、私の目標を満たしていません。

私の目標は、UIレイヤー/アセンブリからのBOレイヤー/アセンブリのみで作業することです。私はきれいなレイヤー間参照を維持することができます。

私は、BOレイヤー/アセンブリとUIレイヤー/アセンブリのORMapperレイヤー/アセンブリの両方にリファレンスを追加したくありません。

私は、UIレイヤー/アセンブリ内からBOレイヤー/アセンブリで作業したいだけです。

誰かが私に示唆したように、DIではなくReflectionを使用することでのみ可能になります。本当?

答えて

0

ORMレイヤーをBO30の背後にあるの背後に隠そうとするのであれば、依然として依存性注入が役立つはずです。ただし、DIライブラリからUIスレッドを参照することはできません。なぜなら、それはビジネスオブジェクトがそこから来る場所になるからです。

アプローチ:

  • はに対してORMの実装を登録し、起動時にあなたのORMプロジェクト
  • で、このインタフェースを実装しUserオブジェクト
  • を移入するためにデータをロードするためのメソッドが含まれているインタフェースを作成します。インターフェイスは、何らかのDIコンテナを使用しています(使用するDIライブラリの詳細を読み込みます)。
  • Userオブジェクトにコンストラクタを指定しますそれはあなたがUserオブジェクトを必要とするとき、人口インタフェースのインスタンスは、次に

からデータをロードするのにかかる、あなたはそれを作成するために、DIライブラリを尋ねると、DIライブラリがUserを構築し、それをへの参照を与えますORMの実装。あなたはDIコールにいくつかのプロパティを注入し、 'username'と 'password'に完全に値を設定できるようにする必要があります。

DIが発明されたのとまったく同じではないことに注意してください。アプリケーションコードはORMを直接処理してビジネスオブジェクトの作成/読み取り/更新/削除を行うことになっています。

+0

私はより良い解決策を楽しみにしていますが、これは私が今すぐに思いつくことができる最高です。 – jerryjvl

+0

ありがとうジェリー!それは本当に私の考えをくすぐった。 –