Frage

Ich fange Caliburn.Micro lernen, und ich bin wenig confuse Umgang mit Ausnahme / messange-Box in Sicht Modellklasse.

Ich fand einige Blogs über, zum Beispiel:

http://frankmao.com/2010/11 / 18 / Handling-messagebox-in-Caliburn-micro /

Zum Beispiel einige Verfahren im Hinblick auf Modellklasse, die Ausnahme erzeugen kann.

    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)
        }
    }

Was ist sachgemäße Handhabung und diese Ausnahme im Hinblick zeigen? Es existiert jede Art von Muster für caliburn.micro?

Es ist möglich Spur Ausnahme wie in .NET in Text, XML-Datei?

Zum Beispiel würde Ich mag Spur Ausnahme in xml, Textdatei und in View zeigt nur message.box oder etwas Nachricht.

Danke für Fortschritt, vielleicht ist meine Frage wenig dumm, sorry ich nur lernen calibur.micro.

War es hilfreich?

Lösung

Sie werden wollen, immer Arbeit gegen Abstraktionen in Ihrer Ansicht Modelle, im Fall der Meldungsfelder, Sie möchten nicht für Benutzereingaben warten müssen, wenn Sie Unit-Test Ihrer Ansicht Modelle kommen.

Der Frank Mao Code, den Sie verwendet einen Delegierten zu abstrahieren die Umsetzung des Meldungsfeld aus der Sicht Modell verknüpft, aber ich würde eine Schnittstelle hier verwenden. Sie können mit einem einzigen Verfahren als Schnittstelle eines Delegierten denken, aber der Vorteil, eine Schnittstelle in diesem Zusammenhang ist, dass man verschiedene Methoden je nach Art der Meldung haben, können Sie zeigen wollen. Zum Beispiel könnten Sie eine ShowMessageError haben, ShowMessageWarning, ShowMessageInfo etc.

So definieren Sie einen Vertrag für Ihre Nachricht Feld:

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

Inject Meldungsfeld Abhängigkeit in Ihrer Ansicht nach Modell, z.B. über den Konstruktor

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);
    }
  }
}

Sie können dann das Meldungsfeld implementieren sowieso wünschen Sie, entweder das Windows-Systemmeldungsfeld, oder schöneren noch Ihre eigene Sicht verwenden / Viewmodel die Nachricht anzuzeigen, vielleicht die Caliburn.Micro WindowManager.ShowDialog () verwenden.

Eine Implementierung, die das Windows-Systemmeldungsfeld verwendet aussehen kann:

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

In der Produktion Code können Sie StandardMessageBox gegen die IMessageBox Schnittstelle in Ihrem IoC-Container registrieren.

In Unit-Test-Land, können Sie IMessageBox verspotten und haben es nichts zu tun, oder im Fall von Verfahren mit einem Ergebnis aus dem Nachrichtenfeld zurückkehrt immer einen Wert, den Sie mögen.

Für die Ausnahme der Anmeldung, würde ich an einer Logging-Framework aussehen wie log4net ( http: // logging.apache.org/log4net/index.html ) oder NLog ( http://nlog-project.org / )

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top