c# - 如何最好地存储 .NET 控制台应用程序的命令及其响应代码?
问题描述
描述
我的应用程序接受用户输入 ( ReadLine()
) 并调用其相应的函数作为结果。
目前,它只是switch
检查某些命令,其中包含它们的响应代码cases
,但我认为我应该将它们分开以获得更清晰的代码。
这里选择的设计模式是什么?
尝试的解决方案
我可以创建一个带有字段和强制函数的抽象Command类。然后,我会持有一个List of Commands,遍历每个命令以检查它是否与用户输入的内容匹配,如果是,则调用它的函数(并打破循环)。commandName
Respond()
commandName
Respond()
问题
这仍然需要手动创建每个命令的实例并将它们添加到保存它们的列表中。
如果可能的话,我希望自动添加每个命令。我希望指示程序遍历Commands/目录中的每个类并实例化并自行添加它,或者类似的东西。
我可以这样做吗?如果没有,最好的选择是什么?
解决方案
对于您要实现的目标,您有两种解决方案:
- 反射。您可以使用反射来查找所有扩展命令抽象的类。
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
- 通过配置 json 或其他配置文件,使用依赖注入来创建类型列表。
这变化很大,具体取决于您选择的 di 框架。
推荐阅读
- javascript - 如何使用 javascript 在其他页面上编辑样式?
- python - 电报机器人传感器数据
- c# - 来自 XAML 的 RoutedEvent
- reactjs - Jest 无法在 FC 中模拟函数
- symfony - React-admin + api-platform - 内容范围
- python - 使用装饰器包装器进行运行时,“DataFrame”对象不是可调用错误
- javascript - 为什么推送到新数组会给我不正确的数据列表?
- assembly - 如何编写 VirtualBox 来宾驱动程序?
- ruby-on-rails - 如何从 rails 控制台从本地硬盘附加 Active Storage 映像?
- javascript - 如何扩展 React 组件的 prop 的默认行为?