首页 > 解决方案 > 如何最好地存储 .NET 控制台应用程序的命令及其响应代码?

问题描述

描述

我的应用程序接受用户输入 ( ReadLine()) 并调用其相应的函数作为结果。

目前,它只是switch检查某些命令,其中包含它们的响应代码cases,但我认为我应该将它们分开以获得更清晰的代码。

这里选择的设计模式是什么?

尝试的解决方案

我可以创建一个带有字段和强制函数的抽象Command类。然后,我会持有一个List of Commands,遍历每个命令以检查它是否与用户输入的内容匹配,如果是,则调用它的函数(并打破循环)。commandNameRespond()commandNameRespond()

问题

这仍然需要手动创建每个命令的实例并将它们添加到保存它们的列表中。

如果可能的话,我希望自动添加每个命令。我希望指示程序遍历Commands/目录中的每个类并实例化并自行添加它,或者类似的东西。

我可以这样做吗?如果没有,最好的选择是什么?

标签: c#.netdesign-patternscommand-line-interfaceconsole-application

解决方案


对于您要实现的目标,您有两种解决方案:

  1. 反射。您可以使用反射来查找所有扩展命令抽象的类。
var type = typeof(IMyInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(s => s.GetTypes())
    .Where(p => type.IsAssignableFrom(p));

然后

// use activator to create an instance and add it to list
list.Add(Activator.CreateInstance(types[0])) // etc
  1. 通过配置 json 或其他配置文件,使用依赖注入来创建类型列表。

这变化很大,具体取决于您选择的 di 框架。


推荐阅读