7

私は2つのアセンブリAとBを持っています。

A には B への既存の参照があり、そのままにしておく必要があります。今、私は A を参照する必要があるいくつかの変更を B に加えました。そのため、循環参照が発生します。

詳細のビット:

A には、B のダイアログをホストする必要があるいくつかのプロパティ グリッドがあります。したがって、この循環参照の問題を回避するために、A と B の両方が参照する 3 番目のアセンブリでグリッドへのインターフェイスを定義し、B のみがインターフェイスを参照するようにしました。

私が直面している2つの問題:

  1. A 内で定義されているグリッド内のカスタム データ型 (具体的にはプロパティ) が多すぎるため、それらのすべてに対してインターフェイスを定義する必要があります。

  2. 渡されたインターフェイスを介してターゲット関数を呼び出すなど、関数パラメーターでこれが機能する例を確認します。しかし、次のコードを考慮すると、どのように適合しますか?

    object = new CustomPropertyGridWrapper(...)
    m_property.SelectedObject = object;

4

5 に答える 5

3

インターフェイスで死を試みているようですね。すべてをインターフェイスで公開する必要はありません。

簡単な答えは、アセンブリをマージするか、共通のコントロールとデータ型を 3 番目のアセンブリに移動することです。物事にアクセスしたり操作したりするための一貫した契約上の方法が必要であり、実際の実装を隠したい場合にのみ、物事をインターフェースする必要があります。

于 2010-08-17T10:05:11.247 に答える
1

問題 1 については、2 つのプロジェクトをマージするか、コード生成を行う以外に解決策はありません。

2 つ目は、Factory デザイン パターンを実装することで実現できます。

于 2010-08-17T09:59:56.833 に答える
0

コードをリファクタリングするか、アセンブリをマージします = 循環参照を使用しないでください。非常に悪い設計の兆候です。

于 2010-08-17T09:58:47.703 に答える
0

B が A のビットに依存するようになった場合、おそらくそれらのビットを、A と B の両方によって参照される新しいアセンブリ C にリファクタリングする必要があります。

于 2010-08-17T10:07:15.130 に答える