C# 如何最好地存储.NET控制台应用程序的命令及其响应代码? 描述
我的应用程序接受用户输入(C# 如何最好地存储.NET控制台应用程序的命令及其响应代码? 描述,c#,.net,design-patterns,command-line-interface,console-application,C#,.net,Design Patterns,Command Line Interface,Console Application,我的应用程序接受用户输入(ReadLine()),并调用相应的函数 目前,它只是一个开关,用于检查某些命令,它们的响应代码在案例中,但我认为应该将它们分开,以获得更清晰的代码 这里选择的设计模式是什么 尝试解决方案 我可以用一个commandName字段和一个必需的Respond()函数创建一个抽象命令类。然后,我会保存一个命令列表,对每个命令进行迭代,检查其commandName是否与用户输入匹配,如果匹配,则调用其Respond()函数(并中断循环) 问题 这仍然需要手动创建每个命令的实例,
ReadLine()
),并调用相应的函数
目前,它只是一个开关
,用于检查某些命令,它们的响应代码在案例
中,但我认为应该将它们分开,以获得更清晰的代码
这里选择的设计模式是什么
尝试解决方案
我可以用一个commandName
字段和一个必需的Respond()
函数创建一个抽象命令类。然后,我会保存一个命令列表,对每个命令进行迭代,检查其commandName
是否与用户输入匹配,如果匹配,则调用其Respond()
函数(并中断循环)
问题
这仍然需要手动创建每个命令的实例,并将它们添加到保存它们的列表中
如果可能,我希望自动添加每个命令。我希望指示程序在Commands/目录中的每个类上循环,并自己实例化和添加它,或者类似的东西
我可以这样做吗?如果没有,最好的选择是什么?对于您想要实现的目标,您有两种解决方案:
这取决于您选择的di框架,差异很大。您能否详细说明第二个选项,或者提供相关资源的链接?
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