2010-12-20 6 views
1

私はCaliburn.Microを学び始めました。私は、ビューモデルクラスの例外/メッセンジャーボックスとの扱いをほとんど混乱させません。Calibur.Microの例外/メッセージボックス

私は、例えば、約いくつかのブログが見つかりました:例外を生成することができますビューモデルクラスのいくつかの方法例えば

http://frankmao.com/2010/11/18/handling-messagebox-in-caliburn-micro/

を。

public void MethodWichCanProduceEx(string arg1, string arg2) 
    { 
     if(arg1==null) 
      throw new ArgumentNullException("arg1 is null"); 
     if (arg2 == null) 
      throw new ArgumentNullException("arg2 is null"); 

     try 
     { 

     } 
     catch (Exception exception) 
     { 

      throw exception; 
      //? show message box MessageBox.Shox(exception.Message) 
     } 
    } 

これらの例外を正しく表示して表示するにはどうすればよいですか。 caliburn.microにはどんなパターンも存在しますか?

.NETのテキスト、XMLファイルのようなトレース例外がありますか?

たとえば、xml、テキストファイルでトレース例外を表示し、表示ではmessage.boxまたは何かメッセージのみを表示します。

おかげさまで、ありがとうございました。多分私の質問は少しばかです。申し訳ありません、私はcalibur.microを学んでいます。

答えて

3

ビューモデルの抽象に対して常に作業したい場合は、メッセージボックスの場合は、ビューモデルを単体テストするときにユーザーの入力を待つ必要はありません。

リンク先のFrank Maoコードは、ビューモデルからメッセージボックスの実装を抽象化するためにデリゲートを使用しますが、ここではインターフェイスを使用します。デリゲートは単一のメソッドでインターフェイスとして考えることができますが、このコンテキストでインターフェイスを使用する利点は、表示するメッセージの種類によって異なるメソッドを持つことができることです。たとえば、あなたは、そうShowMessageInfoなどShowMessageError、ShowMessageWarning、

を持つことができ、あなたのメッセージボックスの契約を定義します。

public interface IMessageBox 
{ 
    void ShowException(Exception exc); 
} 

は、例えば、ビューモデルにメッセージボックス依存性を注入しますコンストラクタ

public class MyViewModel 
{ 
    private readonly IMessageBox messageBox; 

    public MyViewModel(IMessageBox messageBox) 
    { 
    this.messageBox = messageBox; 
    } 

    public void MethodThatCanThrowException() 
    { 
    try {} 
    catch(Exception exc) 
    { 
     // log the exception here 
     ... 
     // show message box 
     this.messageBox.ShowException(exc); 
    } 
    } 
} 

を経由してあなたは、あなたはまだおそらくCaliburn.Microウィンドウマネージャを使用して、メッセージを表示する独自のビュー/のviewmodelを使用するか、希望するWindowsシステムのメッセージボックスを使用して、またはよりよいとにかくメッセージボックスを実装することができます.ShowDialog()。

のように見えることがあり、Windowsのシステムメッセージボックスを使用して実装:製品コードで

public class StandardMessageBox : IMessageBox 
{ 
    public void ShowException(Exception exception) 
    { 
    MessageBox.Show(exception.ToString(), "Error Occurred"); 
    } 
} 

、あなたのIoCコンテナでIMessageBoxインターフェイスに対してStandardMessageBoxを登録することができます。

ユニットテストの土地では、IMessageBoxをモックアウトして何もしないでください。また、メッセージボックスの結果を持つメソッドの場合は、常に値を返してください。

+0

例外をログに記録するために、私は、log4netのようロギングフレームワーク(http://logging.apache.org/log4net/index.html)になりますかNLog(http://nlog-project.org/)品質と長い説明をいただき、ありがとうございます。 – Gunter

関連する問題