Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何最好地存储.NET控制台应用程序的命令及其响应代码? 描述_C#_.net_Design Patterns_Command Line Interface_Console Application - Fatal编程技术网

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/目录中的每个类上循环,并自己实例化和添加它,或者类似的东西


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

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

  • 反思。您可以使用反射查找扩展命令抽象的所有类
  • 然后

  • 通过配置json或其他配置文件,使用依赖项注入创建类型列表

  • 这取决于您选择的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