Frage

Bibliothek bei

http://testapi.codeplex.com/

Nutzungsauszug aus

http://blogs.msdn.com/ivo_manolov/archive/2008/12/17/9230331.aspx

Ein dritter gemeinsamer Ansatz besteht darin, starke Befehle aus den Befehlszeilenparametern zu bilden. Dies ist in Fällen üblich, in denen die Befehlszeile wie folgt aussieht:

some-exe  COMMAND  parameters-to-the-command

Das Parsen in diesem Fall ist ein bisschen mehr involviert:

  1. Erstellen Sie eine Klasse für jeden unterstützten Befehl, der aus der abstrakten Basisklasse des Befehls abgeleitet ist und eine erwartete Ausführungsmethode implementiert.
  2. Übergeben Sie einen erwarteten Befehl zusammen mit den Befehlszeilenargumenten an commandLineParser.Parsecommand-Die Methode gibt eine stark typische Befehlsinstanz zurück, die ausgeführt werden kann ()-d.

    // Beispiel #3: // Beispiel zum Parsen der folgenden Befehlszeile , was wir effektiv de-serialisieren und ausführen wollen.

     public class   RunCommand : Command
     { 
     bool?  Verbose { get; set; } 
     int? RunId { get; set; }
     public override void Execute()
        {
       // Implement your "run" execution logic here.
        }
     }
      Command c = new RunCommand();
      CommandLineParser.ParseArguments(c, args);
      c.Execute();
    

============================

Ich bekomme nicht, wenn wir bestimmte Klasse vor dem Parsen von Argumenten instanziieren, was ist der Punkt des Befehlszeilenarguments "Run", der die erste ist. Ich dachte, die Idee sei es, den Befehl/die Klasse/die Klasse auf der Grundlage eines Befehlszeilenparameters zu instanziieren und auszuführen ("Run" -Parameter wird zur Instanz -Runcommand -Klasse, "Walk" wird zu WalkCommand -Klasse und so weiter). Kann es mit der neuesten Version erfolgen? Darüber hinaus funktioniert das, was ich von Codeplex heruntergeladen habe, nicht so wie oben beschrieben und akzeptiert den allerersten Parameter ohne Schrägstrich nicht. Wenn ich also den Reflexion verwenden muss, muss ich den Befehlsnamen wie üblich übergeben und tun, dann multi -step - Bestimmung des Klassennamens, Instanziierung durch Reflexion und erst dann andere Argumente über Parseargumente analysieren.

War es hilfreich?

Lösung

Micmit, das Beispiel in meinem Blog war tatsächlich fehlerhaft. Ich habe es seitdem korrigiert.

Im Wesentlichen ist Sie: 1. analysieren Sie das 1. Argument (den Befehlsnamen), um herauszufinden, welchen Befehl Sie instanziieren müssen. 2. Instanziieren Sie den Zielbefehl und übergeben Sie dann den Rest der Argumentliste an ihn. 3. Führen Sie den Befehl aus

dh in deinem Haupt, du würdest so etwas wie das folgende tun ...

if (String.Compare(args[0], "run", StringComparison.InvariantCultureIgnoreCase) == 0)
{
    Command c = new RunCommand();
    c.ParseArguments(args.Skip(1)); // or CommandLineParser.ParseArguments(c, args.Skip(1))
    c.Execute();
}

Ich hoffe, das hilft.

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