/// <summary> /// Determines which one of the nested modules should be invoked and runs it. /// </summary> /// <param name="args">The command line arguments for the module.</param> /// <param name="usagePrefix">The prefix to print before the usage string.</param> /// <returns>True if the run was successful, false otherwise.</returns> public override bool Run(string[] args, string usagePrefix) { if (args == null) { throw new ArgumentNullException("args"); } if (args.Length == 0) { this.PrintUsage(usagePrefix); return(false); } string moduleName = args[0]; if (!this.registeredModulesDictionary.ContainsKey(moduleName)) { Console.WriteLine("Unknown module: {0}.", moduleName); this.PrintUsage(usagePrefix); return(false); } CommandLineModule invokedSubmodule = this.registeredModulesDictionary[moduleName]; return(invokedSubmodule.Run(args.Skip(1).ToArray(), string.Format("{0} {1}", usagePrefix, moduleName))); }
/// <summary> /// Registers a new module. /// </summary> /// <param name="moduleName">The name of the module, which will be used to invoke it from the command line.</param> /// <param name="module">The module.</param> public void RegisterModule(string moduleName, CommandLineModule module) { if (string.IsNullOrEmpty(moduleName)) { throw new ArgumentException("Valid module name should be specified.", "moduleName"); } if (moduleName.Contains(' ') || moduleName.Contains('\t')) { throw new ArgumentException("Module name should not contains spaces or tabs.", "moduleName"); } if (this.registeredModulesDictionary.ContainsKey(moduleName)) { throw new ArgumentException("A module with the given name has already been registered.", "moduleName"); } if (module == null) { throw new ArgumentNullException("module"); } this.registeredModulesDictionary.Add(moduleName, module); this.registeredModuleNames.Add(moduleName); }