3

MVCアプリケーションを作成していて、GUIがコントロールと通信する(コントロールクラスのメソッドを呼び出す)必要があり、コントロールがGUIと通信する(モデルの変更に関連する出力メッセージなどのデータを表示する)必要があります)。したがって、コントロールへの参照(またはポインター)を所有するGUIが必要であり、その逆も同様です。依存性注入を使用してこれらの関係を確立したいと思います。

ただし、双方向DIの問題は、最初のオブジェクトを作成するまで最初のオブジェクトを2番目のオブジェクトに渡すことができないことですが、作成時に2番目のオブジェクトを最初のオブジェクトに渡すことはできません。

この双方向DIをどのように実装できますか?

4

1 に答える 1

6

依存性注入は、あなたが説明している仕事にとって単に間違ったツールです。

コントロールのコレクションを所有する「GUIオブジェクト」(ダイアログ/ウィンドウなど)には、各コントロールへの参照が必要です。このように、ウィンドウはそのコントロールを「認識」しますが、反対の方向は真ではないはずです。そうしないと、そのコントロールの一般性が失われます([ある程度]実行時の依存関係の計算でも)。

代わりに、コントロールはイベント/シグナルを公開することで「GUIオブジェクト」にメッセージを渡す必要があります。コントロールとGUIが異なるスレッドで実行されている場合、コントロールのイベントハンドラーはGUIディスパッチャーに通知する必要があります(ある種のディスパッチャーメカニズムを持たないGUIフレームワークについては知りません)。開発しているGUIフレームワークを教えていただければ、答えを拡張して短いサンプルを含めることができます。

編集:QTで開発しているので、QMLのSignalandHandlerイベントシステムについて読むことから始めることをお勧めします。残念ながら、私は自分でサンプルを提供するのに十分なQTに適応していませんが、おそらく別のユーザーが適応できます。

于 2013-02-17T16:39:38.507 に答える