2011-03-02 7 views
0

C#/ WCFを使用してアプリケーションを構築しています。メインフォームプロジェクトは基本的に他のすべてのプロジェクト(DLL)を接続するものであり、DLLは互いに認識したり参照を許可したりしません。しかし、1つのDLLでは、患者のdllと言うと、ボタンが付いたフォームがあり、そのボタンをクリックすると、別のDLLのフォームを開く必要がありますが、2つのDLLはお互いにしか参照できませんメインフォームを介して接続されています。WCFを使用してウィンドウを開くメッセージを渡す方法

私は、そうした仕事を達成することが可能かどうか、それについてどうすればいいのだろうと思いました。可能であれば、メッセージキューを使用したり、メッセージを送信したりしないことをお勧めします。

アドバイスやご協力ありがとうございます。

+0

あなたはあなたのdllはお互いの参照を持っていないが、お互いのサービス参照を持つことができ、依然としてクライアントマシン上で実行されている同じアプリケーションに住んでいると言っていますか?どうして?このようなアーキテクチャをお楽しみください... –

+0

@Ladislavこれは、実際にはC#のコンポーネント中心のパターンではかなり共通です。 [observer pattern](http://msdn.microsoft.com/en-us/library/ee817669.aspx)は、特定のコンポーネントが異なる構成で使用されている大きなプロジェクトを管理し、UIをプログラムロジックから分離するのに役立ちます。 – Tamschi

+0

@Tamschi:はいObserverパターンですが、リモート呼び出しとしては実装しません。 –

答えて

0

あなたはイベントにフォームをリンクすることができます。

をボタンでフォームにこれを追加します。代わりに

instanceOfFormWithButton.OpenOtherFormClick +=() => 
    { 
     //Open other form, e.g. 
     new OtherForm().Show(); 
     //or 
     new OtherForm().ShowDialog(); 
     //or, with factory class: 
     FormFactory.ShowOtherForm(); 
    }; 

public event Action OpenOtherFormClick; 

    button_Click (object sender, EventArgs e) //Link to the button's Click event... 
    { 
     if (OpenOtherFormClick != null) { OpenOtherFormClick()} 
    } 

は、メインプロジェクトにこれを追加

instanceOfFormWithButton.OpenOtherFormClick += FormFactory.ShowOtherForm; 

ファクトリは、特定のフォームを1つのインスタンスに制限できるという利点があります。たとえば、詳細フォームを1回だけ表示し、すでに開いている場合にのみフォーカスを移動することができます。

0

ご質問が本当に分かりますか分かりませんが、MEFをご覧ください。
ただし、プロセス間通信(net.pipe)にWCFを使用することはできますが、それは良い方法ではありません。

関連する問題