2009-03-28 20 views
0

私は3つのコンポーネントを持っています。 Windowsフォームコントロール(カスタムメイド)、メインクラス、プラグインクラス。イベントに応答する動的

プラグインは更新イベントを生成します。ここで何かがコントロールに追加されます。これは文字列、URLを含む文字列、または別のコントロールになる可能性がありますが、将来的には別のものかもしれません。

これを設計するにはどうすればよいですか?

編集:

私は、もう少し明確にされている必要があります。私が解決したい問題は、特定のアイテムに対して異なる対応をする方法です。

例:プラグインはテキストを追加するだけでもかまいません。イベントをディスパッチし、メインクラスは対応するメソッドを呼び出す必要があります。しかし、別のプラグインはカスタムコントロールを追加することを選択できるので、メインクラスは別のメソッドを呼び出す必要があります。

メインクラスが特定のイベントで異なる動作をする部分を特定する方法を教えてください。

(btw、言葉のプラグインが文法的にすぎない、今はプロジェクトのクラスです)。

答えて

0

かなり簡単です。私はあなたのプラグインクラスのためのインターフェイスを使用することをお勧めします。

interface IPlugin 
{ 
    event EventHandler PluginUpdateEvent; 
} 

フォームクラスまたはメインクラスが要件だったものは何でも、コレクションやプラグインの配列を含み、それらを発見するでしょうどちらかが次のようにする必要があり - 最善であるものは何でも反射、コンストラクタ・インジェクション、設定ファイルを介して。

プラグインをロードする際に、そのプラグインのPluginUpdateEventを購読し、イベントハンドラを追加してイベントに対処し、フォームに必要なものを追加します。あなたはEvent Aggregator pattern

を使用することができます

0

使用モデル - ビュー - コントロールデザインパターンや、あなたの意見では、あなたがそれらを実行したいcallBackFunctionsを渡すチェックしてください。この参照:

-- the code is in LUA 
-- **** I create an answerBox, and when user tap this answerBox I want to print->"test" 

local answerBox = require "view.answerBox" 
local test = answerBox:new() 
test.init("text for your answerBox", "1", function() print "answerBox was tapped by the user" end) 

とanswerBoxクラスのを私は機能を取得し、オブジェクトをタップしたときにそれを呼び出す:

-- constructor 
function new(self, message, id, callBackFunction, obj) 
    function callBackFunction(event)    
     callBackFunction(event) 
    end 
    obj.answerBox:addEventListener("tap", callBackFunction) 
end 

をあなたは、この構造を使用するときは注意してください。この構造体では、answerBoxクラスはViewにあり、CallBackFunctionはコントローラ内にあります。モデルのロジックを使用することもできます。function() print "test" end

これが役に立ちます。 ;)

関連する問題