Cysharp ConsoleAppFramework如何创建三级嵌套子命令
ConsoleAppFramework 多级嵌套子命令实现方案
ConsoleAppFramework 原生支持任意层级的嵌套子命令,你描述的三级命令结构不需要做设计调整,之前三种方案失败均为用法不符合框架约定导致。
错误方案原因说明
- 空格分隔命令名的特性写法无效:框架不会解析
Command特性字符串参数中的空格作为层级分隔符,会将整个字符串识别为单级命令名,无法匹配三级路径,因此触发Command not found错误。 - 字符串数组参数的
Command重载作用是配置命令别名,而非声明多级路径。两个方法同时注册包含subcategory的别名数组,会被框架判定为命令名重复,直接抛出异常。 - 嵌套子类无法识别,通常是因为子类未满足框架扫描要求:嵌套类必须是
public访问修饰符、且继承ConsoleAppBase,才会被注册为对应层级的子命令节点。
正确实现代码
框架的多级命令是通过类嵌套映射路径层级的:根程序对应一级入口,每一层public且继承ConsoleAppBase的嵌套类对应一级子命令,类中的方法对应路径最末端的执行动作。
对应你期望的调用形式,正确代码结构如下:
// 映射一级路径: topTool [Command("topTool")] public class TopToolRoot : ConsoleAppBase { // 映射二级路径: topTool subcategory [Command("subcategory")] public class SubCategoryLevel : ConsoleAppBase { // 映射三级路径: topTool subcategory action1 [Command("action1")] public void Action1([Option("u", "arg")] string arg) { // 业务逻辑 } // 映射三级路径: topTool subcategory action2 [Command("action2")] public void Action2() { // 业务逻辑 } } }
注意:所有层级的命令类都必须添加
public修饰符并继承ConsoleAppBase,否则框架不会扫描注册对应路径。
编译后即可直接使用你预期的命令调用:
./mycli topTool subcategory action1 -u somearg ./mycli topTool subcategory action2
如果需要更深层级的命令,只需要在对应层级的命令类中继续嵌套符合要求的ConsoleAppBase子类即可,框架本身没有命令嵌套层数限制。
内容的提问来源于stack exchange,提问作者Stephen Gilboy
相关产品推荐
相关产品推荐

